为什么这个字符串会附加一些特殊字符?

时间:2016-02-26 12:28:17

标签: html regex django url

这是我的HTML代码

<b><a href="{% url 'polls:logout_info' %}">logout</a></b>
<b><a href={% url 'polls:edit' author %}>Edit</a></b>
<br>

<center><h2> -- WELCOME {{ name }} -- </h2></center>
{% if errors %}
        <ul>
            {% for error in errors %}
            <center>{{ error }}</center>
            {% endfor %}
        </ul>
{% endif %}<br>

这是url.py代码(只显示与此代码相关的网址)

来自django.conf.urls import url

来自。导入视图

urlpatterns = [
    url( r'^login/$', views.login ,name='login'),
    url( r'^saveinfo/$', views.saveinfo ,name='saveinfo'),
    url( r'^indexmain/$', views.indexmain ,name='indexmain'),
    url( r'^indexmain1/$', views.indexmain1 ,name='indexmain1'),
    url( r'^homemain/$', views.homemain ,name='homemain'),
    url( r'^logout_info/$', views.logout_info ,name='logout_info'),
    url( r'^edit/(?P<author>[a-z]+)/$', views.edit ,name='edit'),
]

我收到了这个错误:

  

/ polls / login /中的NoReverseMatch /带有参数的''反向   找不到'('pratiksha',''和关键字参数'{}'。 0个图案   尝试过:[]

为什么这个字符串会附加一些特殊字符?

1 个答案:

答案 0 :(得分:2)

让我们解释如何阅读NoReverseMatch错误。

错误消息中显示了5个变量:

  1. 模式名称:显示在“Reverse for”之后,两个撇号之间。
  2. 传递的位置参数列表:在“with arguments”之后显示,也在2个撇号之间,以元组的形式显示。记得!所有模式都在一个元组中呈现,这可能让您感到困惑。
  3. 传递关键字参数的字典:显示在“和关键字参数”之后,也在2个撇号之间,以字典的形式显示。
  4. 尝试过的模式数量:在“未找到”后显示,为整数。
  5. 尝试过的模式列表:在“模式尝试:”之后显示,作为python列表。
  6. 现在,了解URL反转的工作方式:django将尝试查找与您提供的模式名称匹配的所有url模式。对于每个模式名称,它将检查提供的位置或关键字参数是否可以插入到参数中以代替正则表达式组。所有这些模式都将被列为试用模式。

    现在,我们可以从错误消息中找到答案 1.没有尝试过任何模式,因此找不到匹配提供的模式名称的模式。该问题的解决方案很简单:您将'polls:edit'传递到url标记,但您的模式名为'edit',并且未在命名空间'polls'中注册。您可以通过仅传递'edit'或将模式移动到命名空间来解决这个问题:

    urlpatterns = [
        url( r'^login/$', views.login ,name='login'),
        url( r'^saveinfo/$', views.saveinfo ,name='saveinfo'),
        url( r'^indexmain/$', views.indexmain ,name='indexmain'),
        url( r'^indexmain1/$', views.indexmain1 ,name='indexmain1'),
        url( r'^homemain/$', views.homemain ,name='homemain'),
    
        url( r'^', include([
            url( r'^logout_info/$', views.logout_info ,name='logout_info'),
            url( r'^edit/(?P<author>[a-z]+)/$', views.edit ,name='edit'),
        ], namespace="polls")),
    ]
    
    1. 在第一个(也是唯一的)位置参数的末尾有一个额外的空格。您的正则表达式不会接受这一点,因此不会匹配。你必须摆脱那个空白。在您的视图中,只需致电:

      context ['author'] = context ['author']。strip()