为什么呢?我想在路径的第一层有多个模型:)
使用:Django 1.4.1
代码设置网址:
PAGE_SLUGS = '|'.join(Page.objects.values_list('slug', flat=True))
BRAND_SLUGS = ... same concept
(r'^(?P<brand_slug>%s)/$' % BRAND_SLUGS, 'novomore.apps.catalog.views.product_showcase_list'),
url(r'^%s/$' % PAGE_SLUGS, 'prefab.apps.pages.views.page_detail', name='page'),
在模型页面的保存方法中:
if self.pk is None:
clear_url_caches()
我不想对每个请求运行查询,这就是为什么我使用这个方法,当我添加一个实例时,需要更新PAGE_SLUGS。
clear_url_caches()似乎无法正常工作
有什么建议吗?
这不能解决问题:
if settings.ROOT_URLCONF in sys.modules:
reload(sys.modules[settings.ROOT_URLCONF])
reload(importlib.import_module(settings.ROOT_URLCONF))
答案 0 :(得分:2)
来自How to reload Django's URL config:
import sys
from django.conf import settings
def reload_urlconf(self):
if settings.ROOT_URLCONF in sys.modules:
reload(sys.modules[settings.ROOT_URLCONF])
return import_module(settings.ROOT_URLCONF)
答案 1 :(得分:0)
我不认为你想要做的是一个好主意。为什么不简单地允许URL正则表达式中的任何slug模式,但如果找不到有问题的Page
,则返回404?这会产生同样的效果并且更加简单。
url(r'^(?P<slug>\w+)/$', 'prefab.apps.pages.views.page_detail', name='page'),
然后您的视图代码可以执行类似
的操作from django import shortcuts
def page_detail(request, slug):
page = shortcuts.get_object_or_404(Page, slug=slug)
...