查看最新突破的底部: 我正在运行django SVN 15632
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 admin:index%}工作得很好......
在我的应用core
中我有一个名为site.py
的文件我使用此文件存储有关该网站的内容,因此我不必依赖数据库。长话短说它包含reverse('home')
。现在这一点非常重要,因为无论reverse()
在哪里都是有效的脚本或shell或模板,堆栈跟踪始终包含来自site.py
的行。
为什么django正在执行site.py
?即使它确实为什么它在reverse('home')
上磕磕绊绊?如果我从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的源代码中隔离了抛出错误的行:
django/core/urlresolvers.py
91: lookup_view = getattr(import_module(mod_name), func_name)
它会触发django importlib
,后者又导入site.py
。
答案 0 :(得分:1)
这里有一些问题。
reverse('home')
应该完全按照你的方式工作,但是在反向完成之前你的错误就会发生。我们必须首先解决URL conf问题。
core.views.viewHallo
确实存在吗?
对于管理员网址,name=
无效,因为它是一个包含(没有特定的网址,只是指向另一个网址,因此reverse('admin')
无效) 。
管理员网址具有命名空间,命名空间网址与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')
如果您有任何问题,请与我们联系。
答案 1 :(得分:0)
问题是您在定义函数site
之前导入viewHallo
模块。错误消息非常正确 - 在调用reverse
时,模块没有此类成员viewHallo
。通常情况下,模块会在需要时加载,一切都会好的,但在这种情况下,模块已经处于加载过程中。这是Python模块之间存在循环依赖的情况。