0

我在浏览到https://monajalal.pythonanywhere.com/时得到了这个回溯,完整的代码可以在这里找到https://github.com/monajalal/FirstDjangoApp

NoReverseMatch at /
Reverse for 'post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:    https://monajalal.pythonanywhere.com/
Django Version: 1.9.8
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Exception Location: /home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 508
Python Executable:  /usr/local/bin/uwsgi
Python Version: 3.5.1
Python Path:    
['/var/www',
 '.',
 '',
 '/var/www',
 '/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5',
 '/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/plat-x86_64-linux-gnu',
 '/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/lib-dynload',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages',
 '/home/monajalal/FirstDjangoApp']
Server time:    Mon, 18 Jul 2016 20:31:01 -0500
Error during template rendering

In template /home/monajalal/FirstDjangoApp/blog/templates/blog/post_list.html, error at line 0
Reverse for 'post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
1   {% extends 'blog/base.html' %}
2   
3   {% block content %}
4       {% for post in posts %}
5           <div class="post">
6               <div class="date">
7                   {{ post.published_date }}
8               </div>
9               <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
10              <p>{{ post.text|linebreaksbr }}</p>
Traceback Switch to copy-and-paste view

/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/defaulttags.py in render
                              current_app=current_app) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/urlresolvers.py in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/urlresolvers.py in _reverse_with_prefix
                             (lookup_view_s, args, kwargs, len(patterns), patterns)) ...
▶ Local vars
During handling of the above exception (Reverse for 'mysite.post_new' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []), another exception occurred:
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py in get_response
                    response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py in get_response
                    response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/blog/views.py in post_list
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/shortcuts.py in render
            template_name, context, request=request, using=using) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/loader.py in render_to_string
        return template.render(context, request) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/backends/django.py in render
            return self.template.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render
                    return self._render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in _render
        return self.nodelist.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render
                bit = node.render_annotated(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render_annotated
            return self.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/loader_tags.py in render
        return compiled_parent._render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in _render
        return self.nodelist.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render
                bit = node.render_annotated(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render_annotated
            return self.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/defaulttags.py in render
                return nodelist.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render
                bit = node.render_annotated(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/base.py in render_annotated
            return self.render(context) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/defaulttags.py in render
                        six.reraise(*exc_info) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/utils/six.py in reraise
        raise value ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/template/defaulttags.py in render
            url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/urlresolvers.py in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) ...
▶ Local vars
/home/monajalal/FirstDjangoApp/myvenv/lib/python3.5/site-packages/django/core/urlresolvers.py in _reverse_with_prefix
                             (lookup_view_s, args, kwargs, len(patterns), patterns)) ...
▶ Local vars

我在views.py中有这个:

from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import Post
from .forms import PostForm

# Create your views here.
def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    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})

def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.published_date = timezone.now()
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

def post_edit(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = PostForm(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.published_date = timezone.now()
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm(instance=post)
    return render(request, 'blog/post_edit.html', {'form': form})

以及博客文件夹中 urls.py 中的以下内容:

from django.conf.urls import url
from django.core.urlresolvers import reverse  
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'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
]

你能提示一下问题是什么吗?

4

1 回答 1

0

您需要在 url 命名空间中指定应用名称:

看到这个-> https://docs.djangoproject.com/en/1.9/topics/http/urls/#url-namespaces

否则,您需要在 html 模板中编写 URL,如下所示:

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

即,如果您没有在 URL 的命名空间中指定应用程序名称,则您必须在 html 中的 url 中指定应用程序名称。

希望这能解决问题。

于 2016-07-19T06:05:08.433 回答