未找到带有参数“()”和关键字参数“'pk':6”的“post_edit”的反向。尝试了 0 种模式:[]

Posted

技术标签:

【中文标题】未找到带有参数“()”和关键字参数“\'pk\':6”的“post_edit”的反向。尝试了 0 种模式:[]【英文标题】:Reverse for 'post_edit' with arguments '()' and keyword arguments ''pk': 6' not found. 0 pattern(s) tried: []未找到带有参数“()”和关键字参数“'pk':6”的“post_edit”的反向。尝试了 0 种模式:[] 【发布时间】:2017-08-12 06:30:12 【问题描述】:

我一直在关注djangogirls' tutorial 用 django 创建一个博客,几乎没有任何问题,但现在我继续使用他们的extensions tutorial,它适用于第一个创建的 Web 应用程序,我'当我试图了解给定帖子的详细信息时,我遇到了标题中的错误,这在以前可以正常工作。

这是详细的错误消息

环境:

请求方法:GET 请求地址:http://127.0.0.1:8000/post/6/

Django 版本:1.10.6 Python 版本:3.5.2 已安装的应用程序: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', '博客'] 已安装的中间件: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

模板错误:在模板中 /home/frank/Desarrollo/python/devdjango/djangogirlstut/blog/templates/blog/post_detail.html, 第 14 行的错误 使用参数 '()' 和 'post_new' 反向 未找到关键字参数“”。尝试了 0 个模式:[] 4 : 5 : % if post.published_date % 6 : 7 : post.published_date 8 : 9:% else % 10:发布 11: % endif % 12 : % if user.is_authenticated % 13 : 14 : 15 : % endif % 16 :

post.title

17 :

post.text|linebreaksbr

18 : 19 : % 端块 % 20 :

追溯:

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/exception.py” 在内部 42. response = get_response(request)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/base.py” 在 _get_response 187. response = self.process_exception_by_middleware(e, request)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/base.py” 在 _get_response 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/blog/views.py” 在 post_detail 中 15.return render(request, 'blog/post_detail.html', 'post': post)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/shortcuts.py” 在渲染中 30. content = loader.render_to_string(template_name, context, request, using=using)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/loader.py” 在 render_to_string 68. return template.render(context, request)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/backends/django.py” 在渲染中 66. return self.template.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在渲染中 208. return self._render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在_render 199. return self.nodelist.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在渲染中 994. bit = node.render_annotated(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在 render_annotated 961. return self.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/loader_tags.py” 在渲染中 174. 返回已编译的_parent._render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在_render 199. return self.nodelist.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在渲染中 994. bit = node.render_annotated(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在 render_annotated 961. return self.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/defaulttags.py” 在渲染中 315. 返回nodelist.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在渲染中 994. bit = node.render_annotated(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py” 在 render_annotated 961. return self.render(context)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/defaulttags.py” 在渲染中 439. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/base.py” 相反 91. return force_text(iri_to_uri(resolver._reverse_with_prefix(视图,前缀, *args, **kwargs)))

文件 “/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/resolvers.py” 在 _reverse_with_prefix 392. (lookup_view_s, args, kwargs, len(patterns), patterns)

异常类型:NoReverseMatch at /post/6/ 异常值:Reverse 对于带有参数 '()' 和关键字参数 '' 的 'post_new' 不是 成立。尝试了 0 个模式:[]

网站 urls.py 文件

from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.auth import views




urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^accounts/login/$', views.login, name='login'),
    url(r'^accounts/logout/$', views.logout, name='logout', kwargs='next_page': '/'),
    url(r'', include('blog.urls', namespace='blog')),
]

blog/urls.py 文件(blog 是应用名称)

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

urlpatterns = [
    url(r'^$', views.post_list, name='post_list'),
    url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
    url(r'^post/new/$', views.post_new, name='post_new'),
    url(r'^drafts/$', views.post_draft_list, name='post_draft_list'),
    url(r'^post/(?P<pk>\d+)/publish/$', views.post_publish, name='post_publish'),
    url(r'^post/(?P<pk>\d+)/remove/$', views.post_remove, name='post_remove'),


]

有问题的模板 blog/templates/blog/post_detail.html

% extends 'blog/base.html' %

% block content %
    <div class="post">
        % if post.published_date %
            <div class="date">
             post.published_date 
        </div>
    % else %
        <a class="btn btn-default" href="% url 'blog:post_publish' pk=post.pk %">Publish</a>
        % endif %
    % if user.is_authenticated %
    <a class="btn btn-default" href="% url 'blog:post_edit' pk=post.pk %"><span class="glyphicon glyphicon-pencil"></span></a>
    <a class="btn btn-default" href="% url 'blog:post_remove' pk=post.pk %"><span class="glyphicon glyphicon-remove"></span></a>
    % endif %
        <h1> post.title </h1>
        <p> post.text|linebreaksbr </p>
    </div>
% endblock %

及其扩展的基本模板

% load staticfiles %
<html>
    <head>
        <title>Django Girls blog</title>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
        <link rel="stylesheet" href="% static 'css/blog.css' %">
    </head>
    <body>
        <div class="page-header">
    % if user.is_authenticated %
        <a href="% url 'blog:post_new' %" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>     
        <a href="% url 'blog:post_draft_list' %" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a>
        <p class="top-menu">Hello  user.username  <small>(<a href="% url 'logout' %">Log out</a>)</small></p>

    % else %
            <a href="% url 'login' %" class="top-menu"><span class="glyphicon glyphicon-lock"></span></a>
    % endif %
        <h1><a href="/">Django Girls Blog</a></h1>


        </div>
        <div class="content container">
        <div class="row">
            <div class="col-md-8">
            % block content %
            % endblock %
            </div>
        </div>
        </div>
    </body>
</html>

我尝试过命名空间,我没有更改 urls 文件中的正则表达式(即它们与之前的工作相同),django 版本还可以(1.10)...我读过@987654324 @ 但没有雪茄。

关于我可能在哪里出错的任何想法?


测试 int bash:

from django.urls import reverse
reverse('blog:post_new') Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File
"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/base.py",
line 33, in reverse
    resolver = get_resolver(urlconf)   File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/resolvers.py",
line 67, in get_resolver
    urlconf = settings.ROOT_URLCONF   File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/conf/__init__.py",
line 53, in __getattr__
    self._setup(name)   File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/conf/__init__.py",
line 39, in _setup
    % (desc, ENVIRONMENT_VARIABLE)) django.core.exceptions.ImproperlyConfigured: Requested setting
ROOT_URLCONF, but settings are not configured. You must either define
the environment variable DJANGO_SETTINGS_MODULE or call
settings.configure() before accessing settings.

【问题讨论】:

【参考方案1】:

blog 应用位于命名空间 blog 下。对此应用的 URL 的每个引用都应采用 namespace:url_name 的形式。

因此,您应该在% url % 模板标签内使用命名空间。您在违规模板中正确执行此操作,您也应该在基本模板中执行相同操作。

所以在base.html 内部(以及其他任何地方都涉及blog url):

<!-- base.html -->

% url 'blog:post_new' %
% url 'blog:post_draft_list' %

保持 % url 'login' %% url 'logout' % 不变。它们没有命名空间。

【讨论】:

我刚试过,但没有任何变化。还是一样的错误信息:S 你发过post_detail.html吗? 是的,它是“违规模板”。我最好说清楚 回溯在第 14 行的post_detail.html 内部说。但是因为post_detail.html 扩展了base.html,所以它是base.html 的第14 行,它确实调用了反转post_new。命名空间(在base.html 内)没有清除错误? 不,它没有。抱歉,我没有更新模板,现在它反映了它。

以上是关于未找到带有参数“()”和关键字参数“'pk':6”的“post_edit”的反向。尝试了 0 种模式:[]的主要内容,如果未能解决你的问题,请参考以下文章

未找到带有参数 '('',)' 的 'delete_post' 的反向操作。尝试了 1 种模式:['article/(?P<pk>[0-9]+)/remove$']

未找到带有参数“()”和关键字参数“”的“””

“未找到带有参数 '()' 和关键字参数 '' 的 '' 的反向操作。”

未找到带有参数“(”,)”和关键字参数“”的“比率”的反向

未找到带有参数“()”和关键字参数“”的“登录”的反向操作

未找到带有参数“()”和关键字参数“”的“password_change_done”的反向