【发布时间】:2021-01-19 11:08:35
【问题描述】:
我正在 django 中构建一个博客应用程序。在预览每个按钮后的博客列表页面中,我添加了阅读更多链接以详细阅读博客。我正在尝试在博客详细信息页面中添加 slug,但它给出了 NoReverse 错误。
我收到此错误:
这是我的 blog_app 的 urls.py,我已经包含在主项目 url.py 中:
app_name = 'blog_app'
urlpatterns = [
path('', views.BlogList.as_view(), name='blog_list'),
path('write/', views.CreateBlog.as_view(), name='create_blog'),
path('details/<slug:slug>/', views.blog_details, name='blog_details'),
]
这是views.py:
def blog_list(request):
return render(request, 'blog_app/blog_list.html', context={})
class BlogList(ListView):
context_object_name = 'blogs'
model = Blog
template_name ='blog_app/blog_list.html'
class CreateBlog(LoginRequiredMixin, CreateView):
model = Blog
template_name = 'blog_app/create_blog.html'
fields = ('blog_title', 'blog_content', 'blog_image')
def form_valid(self, form):
blog_object = form.save(commit=False)
blog_object.author = self.request.user
title = blog_object.blog_title
blog_object.slug = title.replace(' ', '-') + '-' + str(uuid.uuid4())
blog_object.save()
return HttpResponseRedirect(reverse('index'))
def blog_details(request, slug):
blog = Blog.objects.get(slug=slug)
return render(request, 'blog_app/blog_details.html', context={'blog':blog})
这是models.py:
class Blog(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='post_author')
blog_title = models.CharField(max_length=264, verbose_name='Assign a Title')
slug = models.SlugField(max_length=264, unique=True)
blog_content = models.TextField(verbose_name="What's on your Mind")
blog_image =models.ImageField(upload_to='blog_images', verbose_name="Blog Image")
published_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-published_date']
def __str__(self):
return self.blog_title
这是 blog_details.html:
{% extends 'base.html' %}
{% block title %} Blog Details {% endblock title %}
{%block body_block %}
<div class="row" >
<div class="col-sm-6">
<h2>{{ blog.blog_title }}</h2>
<h4>Posted By: {{ blog.author }}</h4>
<i><h6>Published On: {{ blog.published_date}}</h6></i>
<i><h6>Updated On: {{ blog.update_date }}</h6></i>
</div>
<div class="col-sm-6">
<img src="/media/{{ blog.blog_image }}" width="100%">
</div>
{{ blog.blog_content | linebreaks }}
</div>
{% endblock body_block %}
这是 blog_list.html:
{% extends 'base.html' %}
{% load custom_filters %}
{% block title %} Home {% endblock title %}
{% block body_block %}
{% for blog in blogs %}
<h2>{{ blog.blog_title }}</h2>
<h6><i>{{ blog.published_date }}</i></h6>
<div class="row">
<div class="col-sm-4">
<img src="/media/{{ blog.blog_image }}" alt="{{ blog.blog_title }}" width="100%">
</div>
<div class="col-sm-8">
<p>
{{ blog.blog_content | range_filter | linebreaks }}
<a href="{% url 'blog_app:blog_details' slug=blog.slug %}">Read More</a>
</p>
<h6>Posted By: <a href="">{{ blog.author }}</a></h6>
</div>
</div>
{% endfor %}
{% endblock body_block %}
这是回溯:
Traceback (most recent call last):
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\core\handlers\base.py", line 204, in _get_response
response = response.render()
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\response.py", line 83, in
rendered_content
return template.render(context, self._request)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\backends\django.py", line
61, in render
return self.template.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\loader_tags.py", line 62,
in render
result = block.nodelist.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\defaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\urls\base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "E:\ProIde\1 - Django Developer Path\Django Blog Project\venv\lib\site-packages\django\urls\resolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'blog_details' with keyword arguments '{'slug': "Authorities-Take-Down-World's-Largest-Illegal-Dark-Web-Marketplace-1cf46a73-4daf-4d94-8db6-faa7c559535b"}' not found. 1 pattern(s) tried: ['blog/details/(?P<slug>[-a-zA-Z0-9_]+)/$']
如何解决错误?
【问题讨论】:
-
你的
Authorities-Take-Down-World’ s-Langest-Tllegel-Dark-Web-Marketplace-1cfasa73-4daf-4d94-Sdb6-fea7eS595356不是 slug,sl7ug 不包含重音
标签: python-3.x django django-views