2

テンプレートの 1 つで 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,})

URL

# 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

ContextObjectここで推測するだけですが、それはあなたがあなたの見解を通過していないためかもしれません。したがって、これを修正するには、次のようにします。

from django.template import RequestContext

...

def myform(request):
    ...

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

そうしないと、説明したように、STATIC_URL変数はテンプレートに渡されず、空白になります。また、コンテキストプロセッサの設定にすでにこれがあると仮定します。

django.core.context_processors.static
于 2012-07-07T05:01:32.557 に答える
2

STATIC_URL「空白になる」とは信じがたい。STATIC_URL問題のあるビューの応答が、文字通り価値のない時点からキャッシュされていない限り、これには合理的な理由はありません。ビューまたはテンプレートのキャッシュを使用している場合は、必ずキャッシュを削除するか、同様に memcached (またはその他) を再起動してください。開発中で を使用している場合はrunserver、 を再起動しrunserverます。

動作する場合と動作しない場合に基づいた、より可能性の高いシナリオは、 your のSTATIC_URL前に a が付いていない/、つまり単にstatic/. これにより、ホームページの CSS ファイルへのリンクが作成されます/static/css/forms.cssが (そうあるべきです)、/app/static/css/forms.css別のページにリンクされてしまい、明らかに正しくありません。

于 2012-07-06T21:59:09.987 に答える
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 に答える