Python Django中的搜索字段未重定向到详细信息视图

Python Django中的搜索字段未重定向到详细信息视图,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我在我的博客中添加了一个搜索字段,这样人们就可以输入他们想要阅读的博客的名称,并出现一个项目列表,单击任何列表项目后,它将重定向到详细信息视图。然而,在我的例子中,如果我在搜索中放入任何内容,它不是重定向到细节视图,而是转到而不是 我已经在下面发布了我的模型、视图、URL和模板文件 在这里是否需要使用任何反向方法重定向,以及在模板文件中需要做哪些更改 models.py from django.db import models class Category(models.Model):

我在我的博客中添加了一个搜索字段,这样人们就可以输入他们想要阅读的博客的名称,并出现一个项目列表,单击任何列表项目后,它将重定向到详细信息视图。然而,在我的例子中,如果我在搜索中放入任何内容,它不是重定向到细节视图,而是转到而不是

我已经在下面发布了我的模型、视图、URL和模板文件

在这里是否需要使用任何反向方法重定向,以及在模板文件中需要做哪些更改

models.py

from django.db import models

class Category(models.Model):
    cat_name = models.CharField(max_length = 256, blank = True)

    def __str__(self):
        return self.cat_name
    
class Blog(models.Model):
    name = models.CharField(max_length = 256, blank = True)
    pub_date = models.DateTimeField('date published')
    text = models.TextField(blank = True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, 
                             related_name='categories', verbose_name = 'blog_categories')



    def __str__(self):
        return self.name

views.py

from django.shortcuts import render
from homepage.models import Blog
from django.views.generic import TemplateView, ListView, DetailView
from homepage import models
from django.db.models import Q

class Home(TemplateView):
    template_name = 'homepage/index.html'

    
class BlogListView(ListView):
    context_object_name = 'blogs'
    model =  models.Blog
    template_name = 'homepage/blog_list.html' 


class BlogDetailView(DetailView):
    context_object_name = 'blogs_detail'
    model =  models.Blog
    template_name = 'homepage/blog_detail.html' 

    def get_queryset(self):
        query = self.request.GET.get('q')
        return Blog.objects.filter(
            Q(name__icontains = query) | Q(name__icontains = query) )


class SearchResultsListView(ListView):
    model = Blog
    context_object_name = 'blog_list'
    template_name = 'homepage/search_result_list.html'

    def get_queryset(self):
        query = self.request.GET.get('q')
        return Blog.objects.filter(
            Q(name__icontains = query) | Q(name__icontains = query) )

url.py

from django.urls import path
from homepage import views  
from homepage.views import SearchResultsListView

app_name = 'homepage'

urlpatterns = [
    path('', views.Home.as_view(), name = 'index'),
    path('list/', views.BlogListView.as_view(), name = 'blog-list'),
    path('list/<int:pk>/', views.BlogDetailView.as_view(), name = 'blog-list'),
    path('search/', SearchResultsListView.as_view(), name = 'search_result'),
]

从django.url导入路径
从主页导入视图
从homepage.views导入SearchResultsListView
应用程序名称='主页'
URL模式=[
路径(“”,views.Home.as_view(),name='index'),
路径('list/',views.BlogListView.as_view(),name='blog list'),
路径('list/',views.BlogDetailView.as_view(),name='blog list'),
路径('search/',SearchResultsListView.as_view(),name='search_result'),
]
index.html

   <div class="grid-item-1">
        <h1>G</h1>
        <input type="button" name="" value="Back to Home" placeholder="">
        <a href="{% url 'home:index' %}"></a>


        <form action="{% url 'home:search_result' %}" method = 'get'>

            <input type="text" name="q" placeholder="search">
        
        </form>
        
    </div>

G
搜索结果列表.html

{% for blog in blog_list %}
<ul>
    <li>
        <a href="{{blog.id}}">{{blog.name}}</a>
        {{blog.address}}
         <a href="{{blog.id}}">here</a> 

    </li>
</ul>  



{% endfor %}
{%用于blog_list%}
  • {{blog.address}
{%endfor%}
该URL重定向到一个404页面


如何将其重定向到“详细信息视图”页面并查看由搜索结果拉入的列表的详细信息。

发生这种情况的原因是
{{blog.id}
仅包含一个数字,例如
2
。它将被附加到URL。您可以通过在URL前面加一个斜杠(
/
)并用以下内容编写列表来解决此问题:

<a href="/list/{{blog.id}}">{{blog.name}}</a>
{{blog.address}}
<a href="/list/{{blog.id}}">here</a>
在您的
blogdailview
中,没有
q
参数,因此您可以删除
get\u queryset

class BlogDetailView(DetailView):
    context_object_name = 'blogs_detail'
    model =  models.Blog
    template_name = 'homepage/blog_detail.html' 

    # no get_queryset
类BlogDetailView(DetailView):
context\u object\u name='blogs\u detail'
model=models.Blog
模板名称='homepage/blog\u detail.html'
#无获取查询集

此外,您应该考虑将<代码>详细视图>代码>从<代码>博客列表,到<代码>博客详细信息< /代码>,或类似的东西。

class BlogDetailView(DetailView):
    context_object_name = 'blogs_detail'
    model =  models.Blog
    template_name = 'homepage/blog_detail.html' 

    # no get_queryset