【问题标题】:passing an id in django homepage url在 django 主页 url 中传递一个 id
【发布时间】:2019-01-15 10:41:04
【问题描述】:

我正在尝试使用 django 创建一个博客。

我已经截断了帖子,因此您必须单击帖子才能阅读整个帖子。本质上,您应该被重定向到 article.html,在那里您可以阅读整个博客帖子。如果我尝试访问我的article.html/1,我可以阅读该帖子,但如果我尝试在我的主页中使用blog.id 进行正常操作,我会收到错误消息。

这是我的welcome.html 代码:

<a href="{%url 'article' blog.id %}"><p>{pic.post | truncatewords:10 }}</p></button></a>

我的网址如下:

urlpatterns=[
    url(r'^$',views.welcome,name = 'welcome'),
    url(r'^post/', views.post, name='post'),
    url(r'^article/(\d+)', views.article, name='article'),
    url(r'^search/', views.search_results, name='search_results'),
]
if settings.DEBUG:
    urlpatterns+= static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

我的观点

def welcome(request):
    pics=Blog.objects.all()
    return render(request, 'welcome.html', {"pics":pics})

def post(request):
    form= PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        post = form.save(commit=False)
        post.save()
        return redirect('welcome')
    else:
        form = PostForm()
    return render(request, 'post.html', {"form":form})

def search_results(request):
    if 'article' in request.GET and request.GET["article"]:
        search_term = request.GET.get("article")
        print(search_term)

        blogs = Blog.search_results(search_term)
        message = f"{search_term}"

        return render(request  'search.html'{"message":message,"blogs": blogs})
    else:
        message = "You haven't searched for any term"
        return render(request, 'search.html',{"message":message})

def article(request, blog_id):
     pics =Blog.objects.filter(id = blog_id)
     return render(request, 'article.html', {"pics":pics, id:blog_id})

但是,每当我尝试单击帖子以便可以将我重定向到 article.html(以便我可以阅读整个帖子)时,我都会收到以下错误:

NoReverseMatch at /
Reverse for 'article' with arguments '('',)' not found. 1 pattern(s) tried: ['article/(\\d+)']

我哪里错了?

【问题讨论】:

  • 您的主页中没有任何名为 blog 的内容。 blog.id 应该指的是什么?您可能需要显示更多该welcome.html 模板。

标签: python django django-views django-urls


【解决方案1】:

在您的欢迎视图中,您将 博客查询集 作为 图片 传递给上下文。

在您的模板中,您使用pic.post 访问帖子内容。所以我假设你循环浏览像这样的帖子{% for pic in pics %}

如果是这样,您可以尝试使用 pic.id 访问 id,这样您的 url 将是:

{% url 'article' pic.id %}

【讨论】:

  • 谢谢,我已经按照您的建议使用了 pic.id,现在可以正常使用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多