【问题标题】:Django Search returning the detailed view pageDjango Search 返回详细视图页面
【发布时间】:2022-01-22 21:45:36
【问题描述】:

在models.py中

class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField(blank=True, null=True)

在views.py中

def index(request):
    entry = Person.objects.all()
    context = {'entry':entry}
    return render(request, 'searching/index.html', context)
    
def detail(request, pk):
    entry = Person.objects.get(id=pk)
    context = {'entry':entry}
    return render(request, 'searching/detail.html', context)

在 urls.py 中

path('name/', views.index, name='index'),
path('name/<str:pk>/', views.detail, name='detail'),

我卡住了,我想创建一个搜索栏,如果您搜索确切的 id,例如我的模型的 id 为 1,如果我在框中搜索 1,它应该返回 mysite.com/name/1 而不是得到包含查询结果的页面,其中包含 1 我想要的正是我搜索的那个。

我看起来很努力,但我找不到解决方案,这似乎是一个简单的问题,我觉得很愚蠢。有没有我想念的简单解决方案?

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    我认为您正在寻找的是一种从带有搜索参数的索引页面重定向到详细信息页面的方法。如果您像这样在索引页面中插入支票,它现在应该获取通过搜索字段提交的 ID 并重定向到页面。这会将丢失 ID 的所有错误处理留给您的 detail 视图。

    from django.shortcuts import redirect
    
    def index(request):
        pk = request.GET.get('q')  # /name/?q=1
        if pk:
            return redirect('detail', pk=pk)
    
        entry = Person.objects.all()
        context = {'entry': entry}
        return render(request, 'searching/index.html', context)
    

    您需要将'q' 更新为您的搜索字段的名称。如果您的 url 名称位于命名空间中,则需要将其添加到 redirect 调用中。如果您的搜索表单使用&lt;form method="POST"&gt; 提交,您需要将request.GET 更改为request.POST

    【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2017-04-10
    • 2018-03-26
    相关资源
    最近更新 更多