2

我在我的一个模板中使用 STATIC_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 应该是无关紧要的。我错过了什么吗?无论使用什么 url,我必须更改什么才能让 STATIC_URL 正确呈现?

4

3 回答 3

2

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

基于它何时起作用和不起作用的另一种更可能的情况是,您STATIC_URL没有以 a 为前缀/,即它只是static/. 这将使指向/static/css/forms.css主页上的 CSS 文件的链接(应该如此),但它会/app/static/css/forms.css在另一个页面上,这显然是不正确的。

于 2012-07-06T21:59:09.987 回答
2

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

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
于 2012-07-07T05:01:32.557 回答
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'),
    #...
)

谢谢大家的帮助。

于 2012-07-09T18:03:48.433 回答