【问题标题】:What does 'Reverse' means in errors when running Django?运行 Django 时出现错误时“反向”是什么意思?
【发布时间】:2017-12-20 22:49:30
【问题描述】:

我正在尝试在浏览器上使用django 运行博客构建。我得到了这个错误:

NoReverseMatch at /   
Reverse for 'blog.views.post_detail' not found.
'blog.views.post_detail' is not a valid view function or pattern name.

我的应用的 url.py 如下所示:

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'^$', views.post_list),
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail),
]

似乎当我输入 127.0.0.1:8000/
该网址将指向views.post_list
我的 views.py 看起来像:

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_list(request):
    posts = Post.objects.filter(published_date__isnull=False)
    return render(request, 'blog/post_list.html', {'posts': posts}

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})

post_list() 将使用 post_list.html 呈现请求。
post_list.html 中,错误来自以下行:

<h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1>  

我不太明白错误消息中的“反向”是什么意思。 views.py 中确实存在“blog.views.post_detail”。我想我得到了代码所需的一切,但不知道出了什么问题。

我是 django 新手,如果问题是基本问题,我很抱歉,感谢您的回答!

【问题讨论】:

  • 不妨看看this post
  • 你在哪里定义post_detail的URL,你想链接到哪个?

标签: python django


【解决方案1】:

Django 1.10 删除了通过视图的虚线导入路径反转 url 的功能。相反,您需要命名您的 url 模式并使用该名称来反转 url:

urlpatterns = [
    url(r'^$', views.post_list, name='post-list'),
    url(r'^(?P<pk>\d+)/$', views.post_detail, name='post-detail'),
]

在你的模板中:

<h1><a href="{% url 'post-detail' pk=post.pk %}">{{ post.title }}</a></h1>

【讨论】:

【解决方案2】:

您应该为您的网址定义一个名称:

urlpatterns [
   url(r'^$', views.post_list,name=post_list),
]

然后像这样使用url标签:

<a href="{% url 'AppName:post_list' %}"></a>

AppName 是你的 django 应用程序名称。

【讨论】:

  • 它说“‘博客’不是注册的命名空间”,我在哪里可以查看我的命名空间?命名空间实际上代表什么?
  • 您是否在 INSTALLED_APPS=[ ] 的 django 设置文件中添加了您的应用?
  • 另外你必须将你的应用添加到你的 djago 项目的 urls.py 文件中(不是你的应用中的 urls.py)
  • 我做到了。我在 INSTALLED_APPS 中添加了“博客”。
  • 在我项目的 urls.py 中,我写道:url(r'', include('blog.urls'))。对吗?
【解决方案3】:

看来你的urls.py应该是这样的:

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'^$', views.post_list),
    url(r'^(?P<pk>\d+)/$', views.post_detail),
]

【讨论】:

  • 对不起,我的代码中确实有第二行 url() ,但我认为这里不重要并删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2016-04-20
  • 1970-01-01
  • 2013-11-27
  • 2011-03-17
  • 2020-01-31
  • 2019-11-20
相关资源
最近更新 更多