2013-10-02 38 views
4

我有一些基於類的視圖和reverse_lazy奇怪的問題。Django:包含的urlconf core.urls中沒有任何模式

ImproperlyConfigured at /dashboard/student/ 
The included urlconf core.urls doesn't have any patterns in it 

我views.py:

class DashStudentMain(TemplateView): 
    model_class = None 
    template_name = 'learn/dashboard/snip_student_1.html' 
    tab_list = { 
     ("Main", reverse_lazy('dash_student_main_url')), 
     #("History", reverse_lazy('dash_student_main_url')) 
    } 
    active_tab = "Main" 

我core.urls:

from django.conf.urls.defaults import patterns, include, url 
from django.contrib import admin 
from django.views.generic import RedirectView 
from django.conf import settings 

admin.autodiscover() 

urlpatterns = patterns(
    '', 
    url(r'^$', 'core.views.home', name='home_url'), 
    url(r'^home', 'core.views.home'), 
    url(r'^dashboard/', include('tc_learn.dashboard.urls')), 
    ... 
) 

我tc_learn.dashboard.urls調用網站時,

跟隨誤差顯示出來:

from django.conf.urls.defaults import patterns, url 
from .views import DashStudentMain, DashStudentHistory 

urlpatterns = patterns(
    # Student + Tabs 
    url(r"^", DashStudentMain.as_view()), 
    url(r"^student/$", DashStudentMain.as_view(), name="dash_student_main_url"), 
    url(r"^student/history/$", DashStudentHistory.as_view(), name="dash_student_history_url"), 

我已經

  • 重新啓動服務器,以確保網址進行了適當
  • 加載註釋掉( 「主」,reverse_lazy( 'dash_student_main_url')),以確保該urls.py語法是罰款
  • 刪除線URL(R 「^」,DashStudentMain.as_view()),因爲它不是還是使用,但是沒有它/儀表板/學生沒有在所有的工作..

有什麼想法我可能會錯過?謝謝!

編輯: 看起來問題來自tab_list對象。 當我通過tab_list = reverse_lazy('dash_student_main_url')直接分配對象時,代碼工作正常。當我在列表中使用它時,它顯示錯誤。有沒有人知道這種情況下的解決辦法?

+0

在'INSTALLED_APPS'的設置中,確保'tc_learn'是_before_'core' – karthikr

+0

剛剛嘗試過,但錯誤依然存在:/ –

+0

當它試圖從尚未加載的模塊訪問URL時,通常會發生此錯誤。所以,你可能想要解決'INSTALLED_APPS' – karthikr

回答

9

更改此代碼:

tab_list = { 
    ("Main", reverse_lazy('dash_student_main_url')), 
    #("History", reverse_lazy('dash_student_main_url')) 
} 

到:

tab_list = [ 
    ("Main", reverse_lazy('dash_student_main_url')), 
    #("History", reverse_lazy('dash_student_main_url')) 
] 

相反,你給變量的名稱,你沒有創建一個列表,但一個set。元素在創建集合時立即進行評估,因爲集合需要更多地瞭解它們包含的值。按照預期,將它更改爲適當的列表將允許對元素進行懶惰評估。

+0

太棒了,這個伎倆!非常感謝 –

2

在tc_learn.dashboard.urls中:您缺少第一個參數(在您的情況下爲空前綴)。將其更改爲:

urlpatterns = patterns(
    '', 
    url(r"^", DashStudentMain.as_view()), 
    url(r"^student/$", DashStudentMain.as_view(), name="dash_student_main_url"), 
    url(r"^student/history/$", DashStudentHistory.as_view(), name="dash_student_history_url"), 
) 

此外,第一正則表達式應該是R「^ $」,如果你想它代表一個空 ,看看它是否工作。讓我知道!

+0

太快了!我只是改變了這些線路,並重新啓動服務器,也沒有運氣。 –

+0

在您的設置文件中,ROOT_URLCONF指向什麼? – Alvaro

+0

ROOT_URLCONF ='core.urls'。因爲當我註釋掉「reverse_lazy」時一切正常,我不確定這是否是配置問題 –