1

为什么?我想要路径的第一级有多个模型:)

使用: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'),

在模型Page的save方法中:

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))
4

2 回答 2

3

From 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)
于 2012-10-12T19:58:29.687 回答
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)
    ... 
于 2012-10-16T20:35:28.323 回答