处理包含连字符的Django URL的问题
我在Django的url配置文件里有一组简单的链接,这些链接指向一些对象的详细信息页面。
urlpatterns = patterns('',
url(r'^projects/(?P<slug>[\w-]+)/$', ProjectDetailView.as_view(), name='view_project'),
url(r'^roles/(?P<slug>[\w-]+)/$', RoleDetailView.as_view(), name='view_role'),
)
问题是,每当链接里有连字符(比如:/projects/new-project/
)的时候,Django的开发服务器就会卡住。我用调试工具检查过,发现解析链接和根据slug从数据库获取对象没有问题。但是在渲染模板的时候,它就卡住了。我搞不清楚问题出在哪里。有没有人知道可能是什么原因?
视图代码是,
class ProjectDetailView(DetailView):
model=Project
context_object_name='project_obj'
slug_field='slug'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProjectDetailView, self).dispatch(*args, **kwargs)
模板代码是,
{% extends "base.html" %}
{% load static %}
{% block static %}
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}css/demo_table.css">
<script type="application/javascript" src="{% get_static_prefix %}js/users-index.js"></script>
{% endblock %}
{% block content %}
<div id="itemlist">
{% if project_obj %}
<div>
<p>{{ project_obj.title }}</p>
<p>{{ project_obj.description }}</p>
</div>
{% else %}
<p>No Details available.</p>
{% endif %}
<div>
{% endblock %}
在我从模板中移除了一些标签后,它就开始正常工作了,
<div id="itemlist">
{% if project_obj %}
<div>
<p>{{ project_obj.title }}</p>
<p>{{ project_obj.description }}</p>
</div>
{% else %}
<p>No Details available.</p>
{% endif %}
<div>
2 个回答
5
把 [\w-]+
改成 [-\w]+
。对我来说,[\w-]+
在 Python 的正则表达式里总是不好使。
1
我猜你可能写了一个自定义的模板标签,但它出问题了。你在 base.html
里用了它 :P