0

よろしくお願いします。

DjangoをBluehostで動作させようとしています。Djangoの管理サイトが有効になっており、http://www.my-domain.com/admin/からアクセスできます。ただし、管理サイト全体は、スタイルや画像のないプレーンなhtmlのように見えます。これは、Django独自のサーバー(を使用$ python manage.py runserver)を使用したときに表示されるものとは異なります。

解決策を探した後、私は次のことを試しました。

  1. 私のsettings.pyに適切な値を設定しSTATIC_ROOTますSTATIC_URL(以下のコードを参照)。
  2. ランニング:

    $ python manage.py collectstatic
    

    (何らかの理由で、settings.pyで指定したstatic /フォルダーではなく、プロジェクトのルートフォルダーにファイルをコピーしているようです)

  3. 管理サイトにアクセスすると、まだプレーンHTMLのように見えます。

これが私のsettings.pyファイルからの抜粋です:

import os.path
import sys

# (some more code here)

PROJECT_ROOT = os.path.normpath(os.path.dirname(__ file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    # empty
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

そして、これが私のpublic_htmlフォルダの.htaccessファイルがどのように見えるかです:

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !^/static/
RewriteRule ^(.*)$ my_fcgi_file.fcgi/$1 [QSA,L]

次の点に注意してください。

  • httpd.confにアクセスできません。
  • 「pythonmanage.pycollectstatic」を使用すると、プロジェクトの静的フォルダー(で指定したフォルダーSTATIC_ROOT)ではなく、プロジェクトのルートフォルダーにファイルがコピーされます。それらを手動でこのフォルダーにコピーしようとしましたが、管理サイトはまだプレーンhtmlのように見えます。

追加情報が必要な場合はお知らせください。

どんな助けでも大歓迎です:)

ありがとう!

4

2 に答える 2

1

.htaccessファイルでは、^ / static /へのリクエストを除外しているため、書き換えルールは適用されません。にある静的ファイルをコピーするとpublic_html/static/、admincssが表示されます。

それ以外の場合、リクエストを静的ファイルディレクトリにポイントする場合

削除してみてください

RewriteCond %{REQUEST_URI} !^/static/

静的ファイルが存在する場所にリクエストをポイントするルールを追加します

RewriteRule ^(static/.*)$ path/to/static/files [L]

コンポーネントはlastを意味し、[L]staticで始まるパスに対して他のルールを実行しないようにapacheに指示します。

于 2013-02-14T20:37:19.343 に答える
0

私もこの問題に問題があり、それを解決することができたので、これを共有したいと思いました。

「pythonmanage.pycollectstatic」を使用すると、プロジェクトの静的フォルダー(STATIC_ROOTで指定したフォルダー)ではなく、プロジェクトのルートフォルダーにファイルがコピーされます。

指定しました:

PROJECT_ROOT = os.path.normpath(os.path.dirname(__ file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

との間にスペースが__ありfile__ます。これが単なるコピーと過去の問題であるかどうかはわかりませんが、Djangoが設定を読み取れない場合は、これが問題である可能性があります。

さらに興味深い部分は、どのRewriteRuleを使用するかを理解する方法でした。Alias静的ファイルとRewriteRulecgiの組み合わせを提案する人もいました。ただし、エイリアスはリライト後に評価され、静的URLがcgiに渡されないように静的処理を事前に処理する必要があるため、これは機能しません。

.htaccessファイルは自身の場所に関連してファイルを検索するため、すべてがどこにあるかを理解することが重要です。これが私の特定の環境を探すものです。

sshアクセスのある仮想サーバーでDjangoを実行しています。つまり、アクセス権がありません。/srv/wwwたとえば、すべてがホームディレクトリ内の場所にあります。

/home/<user>/

静的ファイルを含む私のユーザーwwwrootがあり.htaccessます:/home//html /home//html/.htaccess /home//html/static

これは、内の2つの重要な行ですsetting.py

STATIC_URL = '/static/'
STATIC_ROOT = '/home/<user>/html/static/'

STATICFILES_DIRS私は持っていませんしSTATICFILES_FINDERS、Django1.6.1のデフォルトを使用しているためです。

私が走るとき

python manage.py collectstatic

私のアプリとプロジェクトの静的ディレクトリからのすべてがにコピーされていSTATIC_ROOTます。STATIC_URL静的ファイルを参照する文字列Djangoプレフィックスurlsです。したがって、Apache WebサーバーがのようなURLを受信した場合、http://www.mydomain.com/static/mystyle.cssそれをDjangoにリダイレクトしてはならず、ファイルを探す場所を知る必要がありますmystyle.css

だからこれは私の.htaccessです:

RewriteEngine on
RewriteRule ^static/(.*)$ static/$1 [L]
RewriteRule ^(.*)$ /fcgi-bin/<django-fcgi-file>/$1 [QSA,L]

ご覧のとおり、私はfcgiを使用していますが、他の人はwsgiを使用している可能性がありますが、それは問題ではありません。さらに重要なのは、この1行を追加したことRewriteRule ^static/(.*)$ static/$1 [L]です。

staticこれは、URLが(接頭辞のスラッシュなしで!)で始まる場合は常に、後続のすべて(.*)(これはとして参照されます$1)をディレクトリにリダイレクトしてstatic追加する必要があることをApacheに通知します$1[L]Tim Edgarが説明したように、Apacheにこのルールを優先するように指示します。

これは私からのトリックをしました。いくつかの関連する回答が提案されましたが/static/$1/(接頭辞がスラッシュ付き)、機能しませんでした(相対パスではないため)。私の場合、ディレクトリはディレクトリstatic内にあります。したがって、相対パスはここで機能します。html.htaccess

自分の環境に対するTimの回答に基づいてRewriteRuleを使用すると、次のようになります。

RewriteRule ^(static/.*)$ $1 [L]

$1一致にはすでに単語が含まれているため、ターゲットパスは単純static/です。

于 2014-01-28T16:40:06.957 に答える