我在Django url conf文件中有一组简单的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/
)slug,Djangos开发服务器就会卡住。我已经检查过pdb,解析url并根据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>
答案 0 :(得分:5)
将[\w-]+
更改为[-\w]+
。对我来说[\w-]+
永远不适用于python regexp。
答案 1 :(得分:1)
我的猜测是你写了一个自定义模板标签,但它已经坏了。您在base.html
:P