简体   繁体   English

Django陷入困境的麻烦:NoReverseMatch at /

[英]Django trouble getting slugified URL: NoReverseMatch at /

I'm trying to access a page using a slugified url in my django blog app project. 我正试图在我的django博客应用程序项目中使用slugified url访问页面。

This is what the problem template code looks like: 这就是问题模板代码的样子:

          {% for post in latest_post_list %}
    <li><a href="{% url 'blog:view_post' post.title_text|slugify %}">{{post.title_text}}</a>&nbsp;{{post.pub_date}}</li>

This is what my url route looks like: 这是我的网址路线:

 url(r'^(?P<post_name>)/$', views.view_post, name='view_post'))

and this is what my view function looks like: 这就是我的视图功能:

def view_post(request, post_name):
pdb.set_trace()
try:
    post_name =  post_name.encode('ascii','ignore') #un-unicode name

    unslugified_post_name = post_name.replace('-', ' ')  #will get slugified name, replace all hyphens with spaces
    post = Post.objects.get(title_text=unslugified_post_name)


except Post.DoesNotExist:
    raise Http404("Post does not exist")

return render(request, 'blog/posts.djhtml', {'post': post})

And this is the stack trace for the error that I receive: 这是我收到的错误的堆栈跟踪:

    Environment:


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

Django Version: 1.7.3
Python Version: 2.7.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'blog')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Template error:
In template /home/andrew/projects/heroku-blog/My-Django-Blog/blog/templates/blog/index.djhtml, error at line 53
   Reverse for 'view_post' with arguments '(u'lorem-ipsum',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'blog/(?P<title_text>)/$']
   43 :     <h5><a href="/blog/">Programmer Plebeian</a></h5>


   44 :       </div>


   45 :       {{navbar|safe}}


   46 :       </div>


   47 :     </div>


   48 :     <div class="row">


   49 :       <div id="postindex" class="eleven columns">


   50 :           <ul>


   51 :         {% if latest_post_list %}


   52 :           {% for post in latest_post_list %}


   53 :         <li><a href=" {% url 'blog:view_post' post.title_text|slugify %} ">{{post.title_text}}</a>&nbsp;{{post.pub_date}}</li>


   54 :           {% endfor %}


   55 :       </ul>


   56 :         {% else %}


   57 :       <p>There is no blog post available here</p>


   58 :         {% endif %}


   59 :     </section>


   60 :       </div>


   61 :     </div>


   62 :   </div>


   63 : 


Traceback:
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/blog/views.py" in index
  13.     return render(request, 'blog/index.djhtml', context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/shortcuts.py" in render
  50.     return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  178.         return t.render(context_instance)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/base.py" in render
  148.             return self._render(context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/base.py" in _render
  142.         return self.nodelist.render(context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  312.                 return nodelist.render(context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  201.                             nodelist.append(node.render(context))
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  458.                         six.reraise(*exc_info)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  444.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse
  551.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/home/andrew/projects/heroku-blog/My-Django-Blog/venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  468.                              (lookup_view_s, args, kwargs, len(patterns), patterns))

Exception Type: NoReverseMatch at /
Exception Value: Reverse for 'view_post' with arguments '(u'lorem-ipsum',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'blog/(?P<title_text>)/$']

The value of the field that's causing this error is "lorem ipsum" 导致此错误的字段的值是“lorem ipsum”

I know the problem is probably in the route regular expression, but I'm having trouble figuring out the proper regular expression for it, I'm new to them. 我知道问题可能在路径正则表达式中,但是我无法找到适当的正则表达式,我是新手。 All I'm trying to do right now is get the string that's passed to it, regardless of what it looks like. 我现在所做的就是获取传递给它的字符串,无论它看起来如何。 But if you're willing to show me a more robust one, I would be very appreciative. 但如果你愿意向我展示一个更强大的,我会非常感激。

Also, is there a way to prevent slugify from returning a unicode string? 另外,有没有办法防止slugify返回unicode字符串?

Your regex for view_post is empty. 您对view_post正则表达式为空。 Change it to this: 把它改成这个:

url(r'^(?P<post_name>[\w-]+)/$', views.view_post, name='view_post')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM