【问题标题】:NoReverseMatch at /blog/2018/NoReverseMatch 在 /blog/2018/
【发布时间】:2019-04-24 16:02:08
【问题描述】:

请帮帮我。我不知道这个问题...
有什么问题?
html代码图片:

错误页面图片:

博客/urls.py

urlpatterns = [
      -- skip --

      # Example: /2018/nov/
      url(r'^(?P<year>\d{4})/$', PostYAV.as_view(), name='post_year_archive'),

      -- skip --
]

blog/views.py

from blog.models import Post
from django.views.generic.dates import --skip--, YearArchiveView, --skip--

-- skip --

class PostYAV(YearArchiveView):
     model = Post
     date_field = 'modify_date'
     make_object_list = True

【问题讨论】:

  • 请将您的代码和错误输出作为文本而不是图像。

标签: python django django-urls


【解决方案1】:

如果您尝试使用此网址:

 url(r'^(?P<year>\d{4})/$', PostYAV.as_view(), name='post_year_archive'),

然后像这样从模板中调用它:

{% url 'blog:post_year_archive' year|date:'Y' %}

View 应该是这样的:

class PostYAV(YearArchiveView):
    model = Post
    date_field = 'modify_date'
    make_object_list = True

    def get(self, request, year, *args, **kwargs):
        post = Post.objects.filter(created__year=year)  # assuming created= models.DateField() or similar

但是如果你也有月份(就像与问题分享的图片一样,那么试试这样)

url(r'^(?P<year>\d{4})/(?P<month>\d{2})/$', PostYAV.as_view(), name='post_year_archive'),

模板

  {% url 'blog:post_year_archive' year|date:'Y' month|date:'m' %}

查看:

class PostYAV(YearArchiveView):
    model = Post
    date_field = 'modify_date'
    make_object_list = True

    def get(self, request, year, month, *args, **kwargs):
        post = Post.objects.filter(created__year=year, created__month=month)  # assuming created= models.DateField() or similar

您的问题出现错误是因为 url 正则表达式与从模板传递的参数不匹配。 %b 显示本地化月份,与正则表达式 [a-z]{3} 不匹配。因此,%m 会将月份作为数字传递,我们已经更新了月份的正则表达式以捕获从模板发送的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多