1

外部のcssファイルをdjango1.3開発サーバーで動作させようとしています。djangoの「静的ファイルの管理」と同様のSOの質問をたくさん読みましたが、それでも何か間違ったことをしているようです。

に行くと、CSSスタイルが正しく表示されないのはなぜlocalhost:8000/pageですか?

ディレクトリ構造

myproject
|-- manage.py
|-- settings.py
|-- urls.py
|-- app
    |-- __init__.py
    |-- models.py
    |-- tests.py
    |-- views.py
    |-- static
        |-- css
            |-- page.css
|-- templates
    |-- app
        |-- page.html

myproject / views.py

import django.http
import django.template.loader
import django.template  

def page_function(request):
    t = django.template.loader.get_template("page.html")
    c = django.template.Context()
    return django.http.HttpResponse(t.render(c))

myproject / urls.py

from django.conf.urls.defaults import patterns, include, url
import myproject.app.views

urlpatterns = patterns('',(r'page/$', myproject.app.views.page_function),)

myproject / templates / app / page.css

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}page.css" />
</head>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

</body>
</html> 

myproject / settings.py

(部分的に)

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    "/home/myusername/Desktop/myproject/app/static",
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

ROOT_URLCONF = 'myproject.urls'

TEMPLATE_DIRS = (
    '/home/myusername/Desktop/myproject/templates/app', 
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app'
)
4

2 に答える 2

3

djangoドキュメントから:

{{STATIC_URL}}がテンプレートで機能していない場合は、テンプレートのレンダリング時にRequestContextを使用していない可能性があります。

簡単に復習すると、コンテキストプロセッサはすべてのテンプレートのコンテキストに変数を追加します。ただし、コンテキストプロセッサでは、テンプレートをレンダリングするときにRequestContextを使用する必要があります。これは、汎用ビューを使用している場合は自動的に発生しますが、手動で記述されたビューでは、RequestContextを明示的に使用する必要があります。これがどのように機能するかを確認し、詳細を確認するには、サブクラス化コンテキスト:RequestContextを確認してください。

もう1つのオプションは、Djangoのコアの一部であるget_static_prefixテンプレートタグです。

それ以外の

{{ STATIC_URL }}page.css

使用する必要があります:

{% load static %}
{% get_static_prefix %}css/page.css

また、ディレクトリ構造は静的ファイルで維持されるため、page.cssは「static」のサブディレクトリにあるため、テンプレートに「css/page.css」としてロードする必要があります。

于 2012-07-23T18:55:34.093 に答える
0

また交換

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}page.css" />

{% load static %}
<link rel="stylesheet" type="text/css" href={% myproject "app/static/css/page.css" %}>

動作するはずです。

于 2019-09-19T08:36:52.897 に答える