2012-10-12 100 views
0

为什么?我想对路径:)重载Django的网址,无需重新启动服务器

的第一级多个模型使用: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)) 

回答

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) 
+0

感谢名单,它仍然不工作;香港专业教育学院后 –

+0

更新由于http://codeinthehole.com/writing/how-to-reload-djangos-url-config/上的Django 1.4它不工作的意见吗? –

+0

您可能需要先清除URL缓存使用clear_url_caches重新加载网址()。 – yunshi

0

我不认为你正在试图做的是一个好主意。为什么不干脆让在URL正则表达式的任何蛞蝓模式,而是返回404,如果你不能找到问题的Page?这会产生同样的效果,而且更简单。

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) 
    ... 
+0

那offcourse什么IM做什么,但我想在第一级上的多个对象,而不是对每个进来的请求的一个或多个querys .. 检查我的战后初期,香港专业教育学院增加了一个BRAND_SLUGS例子 –

相关问题