找不到带有参数'()'和关键字参数'{'pk':6}'的'post_edit'.尝试了0个模式:[] [英] Reverse for 'post_edit' with arguments '()' and keyword arguments '{'pk': 6}' not found. 0 pattern(s) tried: []

查看:57
本文介绍了找不到带有参数'()'和关键字参数'{'pk':6}'的'post_edit'.尝试了0个模式:[]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在遵循 djangogirls教程,用django创建博客,几乎没有甚至没有.麻烦,但现在我要继续进行的扩展教程该Web应用程序是在第一个应用程序上创建的,当我尝试获取给定帖子的详细信息时,我遇到了标题错误.

这是详细的错误消息

环境:

请求方法:GET请求URL: 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','blog']已安装的中间件:['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:{%,如果为post.published_date%} 6:7:{{post.published_date}} 8:
9:{%else%} 10:发布11:
{%endif%} 12:{%,如果user.is_authenticated%} 13:14:15:{%endif%} 16:

{{post.title}}

17:

{{post.text | linebreaksbr}}

18:19:{%endblock%} 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 = wrapd_callback(request,* callback_args,** callback_kwargs)

文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/blog/views.py"在post_detail中15.返回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(模板名称,上下文,请求,使用=使用)

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

文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/backends/django.py"在渲染66.返回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.位= node.render_annotated(上下文)

文件"/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.返回created_pa​​rent._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.位= node.render_annotated(上下文)

文件"/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. return nodelist.render(context)

文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py"在渲染994.位= node.render_annotated(上下文)

文件"/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(view,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(模式),模式)

异常类型:在/post/6/处的NoReverseMatch异常值:反向对于带有参数'()'和关键字参数'{}'的'post_new'不是成立.尝试了0个模式:[]

网站urls.py文件

从django.conf.urls中的

 导入包括URL从django.contrib导入管理员从django.contrib.auth导入视图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为应用名称)

django.conf.urls中的

 导入URL从 .导入视图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

  {%扩展了'blog/base.html'%}{%封锁内容%}< div class ="post">{%如果post.published_date%}< div class ="date">{{post.published_date}}</div>{% 别的 %}< a class ="btn btn-default" href ="{%url'blog:post_publish'pk = post.pk%}">发布</a>{% 万一 %}{%如果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>{% 万一 %}< h1> {{post.title}}</h1>< p> {{post.text | linebreaksbr}}</p></div>{%endblock%} 

及其扩展的基础模板

  {%load staticfiles%}< html>< head>< title> Django Girls博客</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><身体>< div class ="page-header">{%如果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">您好{{user.username}}< small>((< a href ="{%url'logout'%}">注销</a>))<;/small</p>{% 别的 %}< a href ="{%url'login'%}" class ="top-menu">< span class ="glyphicon glyphicon-lock"<</span></a>{% 万一 %}< h1>< a href ="/"> Django Girls Blog</a></h1></div>< div class ="content container">< div class ="row">< div class ="col-md-8">{%封锁内容%}{%endblock%}</div></div></div></body></html> 

我尝试过命名间隔,我没有更改urls文件中的正则表达式(即它们与以前的工作方式相同),django版本还可以(1.10)...我读过关于NoReverseMatch的其他答案,但没有雪茄.

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


测试int bash:

来自django.urls的

 反向导入reverse('blog:post_new')追溯(最近一次呼叫最近):文件< stdin>",< module>中的第1行.文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/base.py",第33行,反过来resolver = get_resolver(urlconf)文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/resolvers.py",第67行,在get_resolver中urlconf = settings.ROOT_URLCONF文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/conf/__init__.py",__getattr__中的第53行self._setup(name)文件"/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/conf/__init__.py",_setup中的第39行%(desc,ENVIRONMENT_VARIABLE))django.core.exceptions.ImproperlyConfigured:请求的设置ROOT_URLCONF,但未配置设置.您必须定义环境变量DJANGO_SETTINGS_MODULE或调用settings.configure(),然后再访问设置. 

解决方案

blog 应用程序位于名称空间 blog 下.对该应用程序的URL的每个引用都应采用 namespace:url_name 的形式.

因此,您应该在 {%url%} 模板标记内使用命名空间.您正在有问题的模板内正确执行此操作,也应该在基本模板内执行相同的操作.

因此在 base.html 中(以及涉及 blog 网址的其他任何地方):

 <!-base.html->{%url'blog:post_new'%}{%url'blog:post_draft_list'%} 

按原样保留 {%url'login'%} {%url'logout'%} .它们没有命名空间.

I've been following djangogirls' tutorial to create a blog with django with little to no trouble, but now I'm going on with their extensions tutorial which works on the web application created on the first one, and I'm coming to the error in the title when I try to get to the detail of a given post, which worked alright before.

Here's the error message in full detail

Environment:

Request Method: GET Request URL: http://127.0.0.1:8000/post/6/

Django Version: 1.10.6 Python Version: 3.5.2 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog'] Installed Middleware: ['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']

Template error: In template /home/frank/Desarrollo/python/devdjango/djangogirlstut/blog/templates/blog/post_detail.html, error at line 14 Reverse for 'post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 4 :
5 : {% if post.published_date %} 6 : 7 : {{ post.published_date }} 8 :
9 : {% else %} 10 : Publish 11 :
{% endif %} 12 : {% if user.is_authenticated %} 13 : 14 : 15 : {% endif %} 16 :

{{ post.title }}

17 :

{{ post.text|linebreaksbr }}

18 : 19 : {% endblock %} 20 :

Traceback:

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 42. response = get_response(request)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/blog/views.py" in post_detail 15. return render(request, 'blog/post_detail.html', {'post': post})

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/shortcuts.py" in render 30. content = loader.render_to_string(template_name, context, request, using=using)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/loader.py" in render_to_string 68. return template.render(context, request)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/backends/django.py" in render 66. return self.template.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render 208. return self._render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in _render 199. return self.nodelist.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render 994. bit = node.render_annotated(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render_annotated 961. return self.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/loader_tags.py" in render 174. return compiled_parent._render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in _render 199. return self.nodelist.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render 994. bit = node.render_annotated(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render_annotated 961. return self.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/defaulttags.py" in render 315. return nodelist.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render 994. bit = node.render_annotated(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/base.py" in render_annotated 961. return self.render(context)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/template/defaulttags.py" in render 439. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/base.py" in reverse 91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "/home/frank/Desarrollo/python/devdjango/djangogirlstut/lib/python3.5/site-packages/django/urls/resolvers.py" in _reverse_with_prefix 392. (lookup_view_s, args, kwargs, len(patterns), patterns)

Exception Type: NoReverseMatch at /post/6/ Exception Value: Reverse for 'post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

The site urls.py file

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')),
]

the blog/urls.py file (blog being the app name)

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'),


]

The offending template 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 %}

and the base template it extends from

{% 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>

I've tried namespacing, I've not changed the regexp in the urls files (i.e. they're the same that did work before), the django version is ok (1.10)... I've read this other answer about the NoReverseMatch but no cigar.

Any ideas on where I may have made it go wrong?


Testing 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.

解决方案

The blog app is under the namespace blog. Every reference to a URL to this app should be of the form namespace:url_name.

So, you should use a namespace inside the {% url %} template tag. You are doing it correctly inside the offending template and you should do the same inside the base template too.

So inside base.html (and anywhere else blog urls are involved):

<!-- base.html -->

{% url 'blog:post_new' %}
{% url 'blog:post_draft_list' %}

Leave {% url 'login' %} and {% url 'logout' %} as is. They are not namespaced.

这篇关于找不到带有参数'()'和关键字参数'{'pk':6}'的'post_edit'.尝试了0个模式:[]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆