2011-02-22 37 views
3

的最新突破得來見底部: 我運行Django的SVN 15632django url反向不起作用的命名網址(重新編輯)找到原因,但現在卡住了!

Tried viewHallo in module core.views. Error was: 'module' object has no attribute 'viewHallo'

是我想reverse('home')reverse('admin:index')後得到的錯誤。

這是我的項目urls.py:

from django.conf.urls.defaults import patterns, include, url 
from django.contrib.staticfiles.views import serve as serveStatic 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    (r'^admin/', include(admin.site.urls)), 
    (r'^dbrowse/', include('dbrowse.urls')), 
    (r'^static/', serveStatic), 
url (r'^$', 'core.views.viewHallo',name='home'), 
) 

這是核心\ views.py

from django.shortcuts import render_to_response 
from django.template.context import RequestContext 
import site 

def viewHallo (request): 
    pass 
    return render_to_response ('core.html', 
           {'site':site, 
           'title':'i am the hallo view', 
           'content':'Hallo World!',}, 
           context_instance=RequestContext(request)) 

使用shell甚至腳本reverse('home')reverse('admin:index')只是不工作。

然而,在我的模板{% url home %}和{%URL管理:索引%}工作得很好......

在我的應用程序

core我有一個名爲site.py我使用這個文件來存儲有關該網站的東西文件,所以我不必依賴數據庫。長話短說它包含reverse('home')。現在這一點很重要,因爲不管reverse()在哪裏執行腳本或外殼或模板,堆棧跟蹤始終包含從site.py開始的行。

爲什麼地球上是django exceling的site.py?即使它爲什麼會在reverse('home')上跌宕起伏? Interstingly,如果我從site.py註釋掉該行,則reverse()開始正常工作。

怎麼回事?這裏是core\site.py

from django.contrib.sites.models import Site 
from django.conf import settings 
from django.core.urlresolvers import reverse 

site = Site.objects.get(pk=settings.SITE_ID) 

NAME = site.name 
SLOGAN = 'it\'s a deal!' 
COPY_HOLDER = 'My Name' 


#(link_title, 'link_address', ['permission']) 
MAIN_MENU = [['home', reverse('home'), 'core.view_tender'], 
      ['admin', reverse('admin:index'), 'is_staff']] 

編輯:我已經分離的Django的源代碼的投擲錯誤的行: 線91 django/core/urlresolvers.py

91: lookup_view = getattr(import_module(mod_name), func_name) 它觸發的Django importlib這反過來進口site.py

回答

1

這裏有幾個問題。

reverse('home')應該如何工作,但你的錯誤發生在反向可以完成之前。我們必須先解決URL conf問題。

core.views.viewHallo確實存在嗎?


爲admin的URL,name=不會工作,因爲它是一個包括(不具有特定的URL,它只是點到另一個URL的conf,所以reverse('admin')不會工作)。

管理網址有一個命名空間,命名空間URL與namespace:named_url http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces

逆轉你說這是唯一東西的作品 - 還有什麼是你想怎麼辦?爲了扭轉其他管理網址,還有這裏列出特定的語法: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls

url = reverse('admin:app_model_change') 

讓我知道如果您有任何問題。

+0

我知道你不能用包含名稱命名url,好點!但奇怪的是,它停止了所有其他的「reverse()」方法的解析。但是,謝謝,我回來了! – 2011-02-22 19:42:32

0

問題是,在定義函數viewHallo之前,您正在導入site模塊。錯誤信息非常正確 - 在調用reverse時,模塊沒有這樣的成員viewHallo。通常情況下,模塊會在需要時加載,一切都會好起來,但在這種情況下,模塊已經在加載過程中。這是Python模塊之間循環依賴的一個例子。

相關問題