0

ベースプロジェクトのsettings.pyで宣言されたSTATIC_URLという変数があります。

STATIC_URL = '/site_media/static/'

これは、たとえば、次のようにCSSファイルにリンクする私のsite_base.htmlで使用されます。

<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ディストリビューションが付属しています。)..... / apps/coursesフォルダーにある「courses」という新しいアプリを作成しました。他のページと同じようにsite_base.htmlを拡張するcourseinstance.htmlというコースのページの1つを表示しています。

ただし、これをブラウザでレンダリングすると、次のように表示されます。

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

このアプリのSTATIC_URLが""に等しいかのように。アプリがプロジェクトと同じ変数値を取るようにするには、何らかの宣言を行う必要がありますか?アプリのsettings.pyファイルがありません。ちなみに、このアプリはINSTALLED_APPSのリストにリストされており、CSSファイルへのリンクがなくても問題なく提供されます(ページがおかしいように見えます)。

よろしくお願いします。

4

2 に答える 2

2

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設定と非常に似ているようです。

MEDIA_URLは、デフォルトのコンテキストプロセッサを介してすべてのテンプレートで使用できるようになります。独自のコンテキストプロセッサを作成することで、同様のことができます。デフォルトのコンテキストプロセッサがdjangoソースにどのように実装されているかを見て、アイデアを得ることができます。

于 2010-05-30T01:08:19.050 に答える
0
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
于 2010-05-30T01:19:12.793 に答える