Django模板针对不同的URL呈现不同

时间:2012-07-06 21:46:39

标签: django templates

我在我的一个模板中使用了STATIC_URL,如果我使用一个url它会正常工作,如果我使用另一个url则会失败。在这两种情况下,使用完全相同的模板运行完全相同的视图。

模板代码:

<link href="{{ STATIC_URL }}css/form.css" type="text/css" rel="stylesheet" />
<!-- rest of page... -->

查看代码:

def myform(request):
    if request.method == 'POST':
        form = MyForm(request.POST, request.FILES)
        obj = save_form(form)
        if obj:
            send_confirmation_email(obj)
            return redirect('done-page')
    else:
        form = MyForm()

    return render(request, 'template.html', {'form': form,})

网址

# site urls.py
urlpatterns = patterns('',
    url(r'^$', 'site.app.views.myform'),
    url(r'^app/', include('site.app.urls'),
    #...
)

# app urls.py
urlpatterns('site.app.views',
    url(r'^$', 'myform'),
    #...
)

以上是我的django网站的片段。如果通过“mydomain.com/”(站点索引)访问该页面,则会正确呈现STATIC_URL并正确链接css文件。如果通过“mydomain.com/app/”(应用程序的索引)访问该页面,则STATIC_URL变为空白,因此没有css,但页面的其余部分正确呈现。

我的印象是,如果视图和模板相同,则网址应该是无关紧要的。我错过了什么吗?无论使用哪个URL,我必须更改什么才能允许STATIC_URL正确呈现?

3 个答案:

答案 0 :(得分:2)

我发现很难相信STATIC_URL“变成空白”。除非从STATIC_URL字面上没有价值的时间缓存违规视图响应,否则没有合理的理由。如果您正在使用视图或模板缓存,请确保删除缓存,或类似的重新启动memcached(或其他)。如果您正在开发并使用runserver,请重新启动runserver

另一种更可能出现的情况是,STATIC_URL不以/为前缀,即只有static/。这将在主页上链接到CSS文件/static/css/forms.css(应该如此),但在另一页上它将是/app/static/css/forms.css,这显然是不正确的。

答案 1 :(得分:2)

只是在这里猜测,但可能是因为您没有在视图中传递ContextObject。所以要解决这个问题,你可以这样做:

from django.template import RequestContext

...

def myform(request):
    ...

    return render(request, 'template.html', {'form': form,}, context_instance=RequestContext(request))

否则,STATIC_URL变量将不会传递给模板,并且如您所述,为空白。我还假设您已在Context Processors设置中使用此功能:

django.core.context_processors.static

答案 2 :(得分:0)

我发现了错误。发生了奇怪的行为,因为这是以前构建的django站点的副本。我忽略了app / urls.py中urlpatterns的第一个参数,让代码指向旧版本。不幸的是,该代码存在于同一个盒子中,并且位于python路径上。因此,这个错误未能引起异常,而是犯了一些我不期待的事情。

实际情况如下:

# site_copy urls.py
urlpatterns = patterns('',
    url(r'^$', 'site_copy.app.views.myform'),
    url(r'^app/', include('site_copy.app.urls'),
    #...
)

# site_copy/app urls.py
urlpatterns('site.app.views',
    url(r'^$', 'myform'),
    #...
)

谢谢大家的帮助。