django reverse()失败了

时间:2011-02-23 13:15:53

标签: django django-urls

简单地在我的项目中的任何地方提到reverse()都失败了,所以{%url%}也是如此。 如果滚动到底部,我已经取得了一些进展!


相关文件

根/ urls.py

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

# Uncomment the next two lines to enable the admin:
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
from site import site_store

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

备注

我第一次注意到reverse()在我的项目中有一个名为site.py的文件试图调用reverse()时失败了。我用它来存储网站设置。我正在使用该文件,因为

  1. 我不想使用很少改变的数据来打扰数据库。
  2. 如果我修改了我的项目数据库,我不希望我的网站设置也下降
  3. 此后我发现了一种使用模型来实现这两个目标的方法。

    但所有这些只是额外的背景信息,以防你在这里有人评论site.py

    更新25/02/11

    这里好了!

    首先注意urls.py(r'^dbrowse/', include('dbrowse.urls'))。导致reverse()失败的原因。我稍后会解释......

    对于模板标签,我发现{% url %}没有变量。我完全认为这是理所当然的。事实上当我测试模板标签时,我只是进入并硬编码{% url 'home' %}之类的东西,这些东西可以工作,有时候我会用{{% url home %}来测试home {1}}是一个变量。我甚至不认为这是完全不同的测试用例。

    但我现在知道{% load url from future %}允许您将变量用作{% url %}

    的参数

    无论如何,现在回到(r'^dbrowse/', include('dbrowse.urls'))

    中的urls.py

    我有一个像这样的文件夹

    project\
        --dbrowse\
            __init__.py
            urls.py
    

    现在这是 dbrowse / urls.py

    from django.conf.urls.defaults import patterns, url
    #databrowse
    from django.contrib import databrowse
    
    databrowse.site.register(MyModel)
    
    urlpatterns = patterns('',
                           url(r'(.*)',databrowse.site.root, name='dbrowse'),)
    

    这是我试图避免将databrowse.site.register(MyModel)放在项目的根目录urls.py中,就像文档建议的那样。我不喜欢用urls.py

    污染我的项目主databrowse.site.register(MyModel)的想法

    然而,我仍然不明白为什么这导致reverse()打破。但我怀疑它与(.*)处于模式中有关。

0 个答案:

没有答案