1

なんで?パスの最初のレベルに複数のモデルが必要です:)

使用:Django 1.4.1

コード設定URL:

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'),

モデルページの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

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 正規表現のスラッグ パターンを単純に許可するのではなく、問題のスラッグ パターンが見つからない場合は 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)
    ... 
于 2012-10-16T20:35:28.323 に答える