0

したがって、djangoを初めて使用すると、メディアURLがロード/動作したくないというこの問題に遭遇しました。これまでのところ、私のurls.pyはそのようにセットアップされています

if settings.DEBUG:
urlpatterns += patterns('',
 (r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),)

私のsettings.pyのように

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/'

私のhtmlテンプレートはそうです

<link rel="stylesheet" href="/media/css/template.css" type="text/css" />
<link rel="stylesheet" href="/media/css/nivo-slider.css" type="text/css" />
<script type="text/javascript" src="/media/js/jquery-1.4.3.min.js"></script>
<script type="text/javascript" src="/media/js/jquery.nivo.slider.pack.js"></script>

http://localhost:8000/media/css/template.cssと入力するたびに、

AttributeError at /media/css/template.css/

'str' object has no attribute 'resolve'

そして、私のdjangoサーバーに次のログを記録します

    Traceback (most recent call last):

  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 283, in run
    self.result = application(self.environ, self.start_response)

  File "C:\Python27\lib\site-packages\django\core\handlers\wsgi.py", line 272, in __call__
    response = self.get_response(request)

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 218, in handle_uncaught_exception
    return callback(request, **param_dict)

  File "C:\Python27\lib\site-packages\django\utils\decorators.py", line 93, in _wrapped_view
    response = view_func(request, *args, **kwargs)

  File "C:\Python27\lib\site-packages\django\views\defaults.py", line 30, in server_error
    t = loader.get_template(template_name) # You need to create a 500.html template.

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 157, in get_template
    template, origin = find_template(template_name)

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 138, in find_template
    raise TemplateDoesNotExist(name)

    TemplateDoesNotExist: 500.html

http://localhost:8000/home/と入力すると、ページが読み込まれますが、css または javascript が読み込まれません。

4

3 に答える 3

1

Django を初めて使用する場合は、1.4 を使用する必要があります。以前のバージョンを使用している場合は、先に進む前にアップグレードしてください。フレームワークの古いバージョンで新しいプロジェクトを開始すると、後で苦しむことになります。

したがって、Django 1.4. 以下が必要です (以下のみ)。

PROJECT_ROOT = os.path.dirname(__file__)

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'assets'),
)

PROJECT_ROOT繰り返しを節約するための便利な変数です。Django とは何の関係もありません。「assets」ディレクトリは、プロジェクト全体の静的リソースをすべて配置する場所です。MEDIA_ROOT好きな名前を付けることができますが、 orと同じにすることはできませんSTATIC_ROOT

また、注意:MEDIA_ROOTは現在、アップロードのみに使用されます。つまり、モデルFileFieldの およびを介して追加されたファイルです。本番環境でのみ使用する管理コマンドの出力専用です。実際に自分で何かを保存することはありません。ImageFieldSTATIC_ROOTcollectstatic

開発で使用runserverしている場合、Django はすべての静的リソースを自動的に提供します。開発中に別の Web サーバーを使用している場合にのみ、次を urls.py に追加する必要があります

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... the rest of your URLconf goes here ...

urlpatterns += staticfiles_urlpatterns()

最後に、MEDIA_ROOT開発中にディレクトリを提供するために、urls.py に以下を追加します。

from django.conf import settings

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
   )

実稼働環境では、MEDIA_ROOTとの両方STATIC_ROOTが、Django ではなく Web サーバーによって直接提供されます。

参照: https://docs.djangoproject.com/en/dev/howto/static-files/

于 2012-03-28T22:08:18.473 に答える
0

http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

たとえば、開発 Web サーバーを使用して Django プロジェクトに取り組んでいて、ブラウザーでページを読み込もうとすると、次の例外が発生するとします。

AttributeError: 'str' object has no attribute 'resolve'

「パターン」という単語を入力するのを忘れたためです。

具体的には、一部の url.py で、次のように入力しました。

urlpatterns = ('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... when you should have typed this:

urlpatterns = patterns('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... See the difference?

最初のものでは、間違って urlpatterns をタプルに割り当てています。2 番目では、django.conf.urls.defaults.patterns 関数を正しく使用しています。

于 2012-03-28T20:50:32.207 に答える
-1

私たちはこのコード

urlpatterns += patterns('',
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'media','show_indexes': True}),
    )
于 2012-03-28T21:36:49.280 に答える