我正在编写一个视图,它接受电子邮件作为通过类似的url传递的参数
url(r'^admin/detail_consultant_service/((?P<consultant_id>[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}))/$',
'admin_tool.views.consultant_service_detail', name="consultant_service_detail"),
这是我的模板的内容
{% for consultant in list_consultants %}
<li>
{{consultant.id}}
<a href="{% url consultant_service_detail consultant.id %}">{{ consultant|disp_info }}</a> <br/>
</li>
{% endfor %}
BUt当我访问url时,我得到错误
everse for 'consultant_service_detail' with arguments '(u'rahul183@gmail.com',)' and keyword arguments '{}' not found.
请帮我解决我的正则表达式中做错了什么,为什么它不接受此邮件。这是问题还是其他原因?
您传递的是位置参数,而不是关键字参数。以下内容应该有效:
{% url consultant_service_detail consultant_id=consultant.id %}
此外,如果您使用Django>=1.5,则应使用url
,如下所示:
{% url 'consultant_service_detail' consultant_id=consultant.id %}
由于这是一种新的行为,您实际上可以(建议)在Django的早期版本中使用(我认为>=1.3):
{% load url from future %}
{% url 'view_name' ... %}
根据这里的情况,我认为正则表达式很好,所以问题很可能是定义本身。试试这个:
url(r'^admin/detail_consultant_service/(?P<consultant_id>[w.%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4})/$',
'admin_tool.views.consultant_service_detail',
name="consultant_service_detail"),
因此一个有效的url将类似于:
foo.com/admin/detail_consultant_service/email.address@here.com/
如果您在一个项目中有多个应用程序(很可能是这里的情况),那么您的url应该是按名称命名的。模板中的url应该是如下所述的格式
{% url 'My-App-Name:my-url-name' args or kwargs %}
因此你的代码应该是这样的,
{% url 'Your-app-Name:consultant_service_detail' consultant_id=consultant.id %}