2012-10-12 98 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例子 –

相關問題