重新加载django url而不重新启动服务器

时间:2012-10-12 19:36:50

标签: django url caching urlconf

为什么呢?我想在路径的第一层有多个模型:)

使用: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 个答案:

答案 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)
    ...