【问题标题】:django - variable declared in base project does not appear in appdjango - 在基础项目中声明的变量不会出现在应用程序中
【发布时间】:2010-05-30 00:10:34
【问题描述】:

我有一个名为 STATIC_URL 的变量,在我的基础项目的 settings.py 中声明:

STATIC_URL = '/site_media/static/'

这用于,例如,在我的 site_base.html 中,它链接到 CSS 文件,如下所示:

<link rel="stylesheet" href="{{ STATIC_URL }}css/site_tabs.css" />

我有一堆与扩展 site_base.html 的不同应用程序相关的模板,当我在浏览器中查看它们时,CSS 正确链接为

<link rel="stylesheet" href="/site_media/static/css/site_tabs.css" />

(这些带有默认的 pinax 发行版。)我创建了一个名为“courses”的新应用程序,它位于 ...../apps/courses 文件夹中。我有一个名为 courseinstance.html 的课程页面的视图,它像其他页面一样扩展了 site_base.html。

但是,当这个在我的浏览器中呈现时,它会显示为

<link rel="stylesheet" href="css/site_tabs.css" />

就好像该应用的 STATIC_URL 等于 ""。我是否必须进行某种声明才能让我的应用程序采用与项目相同的变量值?我没有该应用程序的 settings.py 文件。顺便说一句,该应用程序列在我的 INSTALLED_APPS 列表中,并且可以正常运行,只是没有指向 CSS 文件的链接(因此页面看起来很有趣)。

提前感谢您的帮助。

【问题讨论】:

    标签: python django pinax


    【解决方案1】:

    settings.py 中的变量对模板不可用。模板可用的内容由呈现它的视图决定。当模板被渲染时,你传入一个字典,它是模板的“上下文”。上下文是变量名称及其值的字典。

    要将设置中的值传递给模板,通常需要这样:

    from django.conf import settings
    def my_view(request):
        # view logic
        context = {
                'STATIC_URL': settings.STATIC_URL,
                # other template variables here
        }
        # render the template and produce a response
    

    您的 STATIC_URL 设置似乎与 MEDIA_URL setting 非常相似。

    MEDIA_URL 可通过default context processor 提供给所有模板。你可以通过writing your own context processor 做类似的事情。你可以看看 django 源码中的how the default context processors are implemented 来了解一下。

    【讨论】:

    • 啊,谢谢。将 context_instance=RequestContext(request) 添加到我的 render_to_response 命令就可以了。在下面添加代码,因为它不能很好地作为评论呈现。
    • 将 context_instance=RequestContext(request) 正确传递给 render_to_response 可确保应用所有上下文处理器。
    【解决方案2】:
    def courseinstance(request, courseinstance_id):
        p = get_object_or_404(CourseInstance, pk=courseinstance_id)
        return render_to_response('courses/courseinstance.html', {'courseinstance': p},
            context_instance=RequestContext(request)) #added this part to fix problem
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-22
      • 2014-08-18
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多