我正在练习一个简单的博客网站,如果我点击作者姓名,它会显示相关帖子!如果我使用两个不同的视图函数输出很好,但如果我在一个函数中实现,在作者的帖子页面中它显示了一个不应该的URL! html页面的屏幕截图:
网址链接包含作者帖子页面链接!但根据代码,它应显示帖子链接!
<a href="{{ post.url }}">Url Link</a>
我正在粘贴我的所有代码以便更好地理解。提前谢谢!
这是我的urls.py:
urlpatterns = [
url('^$', views.url_list, name='url_list'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<post>[-\w]+)/$',
views.post_details, name = 'post_links'),
# url(r'^author/(?P<author_slug>[-\w]+)/$', views.author_posts, name = 'url_list_by_author'),
url(r'^author/(?P<author_slug>[-\w]+)/$', views.post_details, name = 'url_list_by_author'),
]
我的view.py是:
def post_details(request, year=None, month=None, day=None, post=None, author_slug=None):
author_post_list = None
if year:
post = get_object_or_404(UrlPost, slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day,
)
if author_slug:
author_post_list = UrlPost.author_manager.author_post(author_slug)
post = None
return render(request, 'detail.html', {'post': post, 'author_post_list': author_post_list})
和html页面:
{% extends "base.html" %}
{% block title %}{{post.title}}{% endblock %}
{% block content %}
<h1>{{ post.title|title }}</h1>
<p>{{ post.publish }}</p>
<ul>
{% for author in post.author.all %}
{% if forloop.first %}
<li><h4>Author: </h4></li>
{% endif %}
<li><h4><a href="{% url "blog:url_list_by_author" author %}">{{ author|title }}</a></h4></li>
{% if not forloop.last %}
<li><h4>, </h4></li>
{% endif %}
{% endfor %}
</ul>
<p>{{ post.description }}</p>
<a href="{{ post.url }}">Url Link</a>
{% include "author_post.html" %}
{% endblock %}
答案 0 :(得分:0)
您在顶部看到的第一个“网址链接”来自您的html模板中的这一行:
<a href="{{ post.url }}">Url Link</a>
显示的所有其他内容均来自author_post.html
模板。网址链接不是“附加”,实际上只是之前的所有内容都丢失了。
可能是因为post
变量是None
。如果您实际检查生成的html,它将如下所示:
<h1></h1>
<p></p>
<ul>
</ul>
<p></p>
<a href="">Url Link</a>
(and the here you will have the contents of author_post)
好了,现在为了解决这个问题:你不应该使用相同的视图来显示帖子和帖子的帖子。您应该创建两个单独的视图。每个都有它的模板。然后,假设您在author_posts
中命名了新视图urls.py
:
urlpatterns = [
url('^$', views.url_list, name='url_list'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<post>[-\w]+)/$',
views.post_details, name = 'post_links'),
url(r'^author/(?P<author_slug>[-\w]+)/$', views.author_posts, name = 'url_list_by_author'),
]