数据库插入后urlpatterns不会更新?

时间:2011-11-01 14:22:19

标签: python django django-urls

我有一个html表单,它将数据插入一个名为srv的表中。

我已经以这种方式构建了urls.py以捕获每个插入内容:

for item in srv.objects.all():
    linkSrv = item.loc.lower() + '/srv/' + item.subctg.lower() + '/' + item.title.lower()
    urlpatterns += patterns('',
    url(r'^' + linkSrv + '/$', 'beta.views.queryFromIndexDeep'),
)

在进行一次插入之后,例如loc ='loc',subctg ='subctg'和title ='title' 如果我将浏览器指向 127.0.0.1:8000/loc/srv/subctg/title / ,我会收到http404错误(没有匹配的网址)

如果我'强制保存'urls.py(vim urls.py然后:x!) - 在loc,subct,title之后插入 - 那么我可以成功访问127.0.0.1:8000/loc/srv/subctg /标题/

任何人都能发光吗?每次在srv表中插入一行时,看起来urlpatterns都需要“更新”。

2 个答案:

答案 0 :(得分:2)

你应该使用这样的东西:

urlpatterns += patterns('',
    url(r'^(?P<loc>\w+)/(?P<subctg>\w+)/(?P<title>\w+)/$',
                         'beta.views.queryFromIndexDeep'),
)

使用正则表达式来匹配您的视图更容易,并且建议使用。在您的视图中,上述内容将匹配定义为beta.views.queryFromIndexDeep(request, loc, subctg, title)的函数,您可以继续使用这些变量从定义的模型中提取相关数据。

答案 1 :(得分:0)

向srv模型添加一个slugfield(唯一)并向模型添加方法

def get_absolute_url(self):
    return /yourapp/%s/ % self.slug

然后在网址中使用模式匹配此

url(r'^srv/(?P<slug>[-\w]+)/$', yourgenericview),

了解django slugify snippit的乐趣http://djangosnippets.org/snippets/690/