安装成功,论坛和主题都很好,但是有一个问题 - 如果我发布一个带有Unicode字符的主题(例如俄语),那么NoReverseMatch:
NoReverseMatch at /forum/
Reverse for 'forum' with arguments '('', 6)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['forum/forum/(?P<slug>[\\w-]+)-(?P<pk>\\d+)/$']
我理解编码的问题。问题是我只是不知道哪个文件以及如何编辑来纠正错误。例如,有必要把prsto# - * - coding:utf-8 - * - 。但在哪里?
Request Method: GET
Request URL: http://127.0.0.1:8000/forum/
Django Version: 1.10.2
Python Version: 3.4.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main_site',
'ckeditor',
'ckeditor_uploader',
'mptt',
'haystack',
'widget_tweaks',
'machina',
'machina.apps.forum',
'machina.apps.forum_conversation',
'machina.apps.forum_conversation.forum_attachments',
'machina.apps.forum_conversation.forum_polls',
'machina.apps.forum_feeds',
'machina.apps.forum_moderation',
'machina.apps.forum_search',
'machina.apps.forum_tracking',
'machina.apps.forum_member',
'machina.apps.forum_permission']
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',
'machina.apps.forum_permission.middleware.ForumPermissionMiddleware']
Template error:
In template C:\Python34\lib\site-packages\machina\templates\machina\forum\index.html, error at line 0
Reverse for 'forum' with arguments '('', 7)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['forum/forum/(?P<slug>[\\w-]+)-(?P<pk>\\d+)/$'] 1 : {% extends 'board_base.html' %}
2 : {% load i18n %}
3 : {% load mptt_tags %}
4 : {% load forum_tags %}
5 :
6 : {% block sub_title %}{% trans "Index" %}{% endblock sub_title %}
7 :
8 : {% block content %}
9 : <br />
10 : <div class="row">
Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in _get_response
217. response = self.process_exception_by_middleware(e, request)
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in _get_response
215. response = response.render()
File "C:\Python34\lib\site-packages\django\template\response.py" in render
109. self.content = self.rendered_content
File "C:\Python34\lib\site-packages\django\template\response.py" in rendered_content
86. content = template.render(context, self._request)
File "C:\Python34\lib\site-packages\django\template\backends\django.py" in render
66. return self.template.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
208. return self._render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\loader_tags.py" in render
174. return compiled_parent._render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\loader_tags.py" in render
174. return compiled_parent._render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\loader_tags.py" in render
70. result = block.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\loader_tags.py" in render
70. result = block.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\library.py" in render
245. return t.render(new_context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
210. return self._render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\defaulttags.py" in render
315. return nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\mptt\templatetags\mptt_tags.py" in render
260. bits = [self._render_node(context, node) for node in roots]
File "C:\Python34\lib\site-packages\mptt\templatetags\mptt_tags.py" in <listcomp>
260. bits = [self._render_node(context, node) for node in roots]
File "C:\Python34\lib\site-packages\mptt\templatetags\mptt_tags.py" in _render_node
253. rendered = self.template_nodes.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\defaulttags.py" in render
315. return nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\defaulttags.py" in render
315. return nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\defaulttags.py" in render
315. return nodelist.render(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Python34\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Python34\lib\site-packages\django\template\defaulttags.py" in render
439. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Python34\lib\site-packages\django\urls\base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "C:\Python34\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
392. (lookup_view_s, args, kwargs, len(patterns), patterns)
Exception Type: NoReverseMatch at /forum/
Exception Value: Reverse for 'forum' with arguments '('', 7)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['forum/forum/(?P<slug>[\\w-]+)-(?P<pk>\\d+)/$']
答案 0 :(得分:1)
这是django-machina的 bug 。使用论坛名称中的Unicode符号,会生成空 slug字段,从而导致NoReverseMatch异常。
请查看此处的代码/machina/apps/forum/abstract_models.py
class AbstractForum(MPTTModel, DatedModel):
...
def save(self, *args, **kwargs):
...
# Update the slug field
self.slug = slugify(force_text(self.name))
...
这是slugify的定义:
def slugify(value, allow_unicode=False):
...
快速修复。更新下面的save()方法实现,并在admin中重新保存所有论坛。
self.slug = slugify(force_text(self.name), allow_unicode=True)
此修复程序已经过测试。