ジャンゴを学び始めたばかりです。ユーザー管理を維持するために、私は Userena アプリを使用しようとしています (私が間違っていなければ、Userena は django 標準認証アプリの拡張です)。
問題なく Userena を構成して、django ベースの Web サイトにデプロイしました。しかし、マグショットは私に少し頭痛を引き起こします:)
新しいユーザーを登録して、マグショットとして写真を選択できます。写真はデフォルトのディレクトリ「マグショット」(プロジェクトのルートに作成されます)にアップロードされ、その後djangoはそれを見つけることができません-エラー404.
写真を参照する URL をヒットした場合を意味します。
http://localhost:8000/accounts/laban/mugshots/2e0973e4d4.jpg
返事が来る
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/accounts/laban/mugshots/
Using the URLconf defined in pilot.urls, Django tried these URL patterns, in this order:
^$
^accounts/ ^signup/$ [name='userena_signup']
^accounts/ ^signin/$ [name='userena_signin']
^accounts/ ^signout/$ [name='userena_signout']
^accounts/ ^password/reset/$ [name='userena_password_reset']
^accounts/ ^password/reset/done/$ [name='userena_password_reset_done']
^accounts/ ^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$ [name='userena_password_reset_confirm']
^accounts/ ^password/reset/confirm/complete/$
^accounts/ ^(?P<username>[\.\w-]+)/signup/complete/$ [name='userena_signup_complete']
^accounts/ ^activate/(?P<activation_key>\w+)/$ [name='userena_activate']
^accounts/ ^activate/retry/(?P<activation_key>\w+)/$ [name='userena_activate_retry']
^accounts/ ^(?P<username>[\.\w-]+)/email/$ [name='userena_email_change']
^accounts/ ^(?P<username>[\.\w-]+)/email/complete/$ [name='userena_email_change_complete']
^accounts/ ^(?P<username>[\.\w-]+)/confirm-email/complete/$ [name='userena_email_confirm_complete']
^accounts/ ^confirm-email/(?P<confirmation_key>\w+)/$ [name='userena_email_confirm']
^accounts/ ^(?P<username>[\.\w-]+)/disabled/$ [name='userena_disabled']
^accounts/ ^(?P<username>[\.\w-]+)/password/$ [name='userena_password_change']
^accounts/ ^(?P<username>[\.\w-]+)/password/complete/$ [name='userena_password_change_complete']
^accounts/ ^(?P<username>[\.\w-]+)/edit/$ [name='userena_profile_edit']
^accounts/ ^(?P<username>(?!signout|signup|signin)[\.\w-]+)/$ [name='userena_profile_detail']
^accounts/ ^page/(?P<page>[0-9]+)/$ [name='userena_profile_list_paginated']
^accounts/ ^$ [name='userena_profile_list']
^mugshots/(?P<path>.*)$
The current URL, accounts/laban/mugshots/, didn't match any of these.
根本的な原因は間違った URL マッピングだと思いますが、それを修正する方法がわかりません。助けてください!:)
ルート urls.py は次のとおりです。
from django.conf.urls import patterns, include, url
from pilot import settings
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', include('zlab.pilot.index.urls')),
(r'^accounts/', include('userena.urls')),
# Examples:
# url(r'^$', 'www.views.home', name='home'),
# url(r'^www/', include('www.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)
# desperate copy/paste...
# Serve media files only in development
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^mugshots/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
)
else:
print "no server is configured to serve media files. Do it now."
EDITED:ちょっと解決しました...私の発見を共有したいだけです。
まず、settings.py を MEDIA_ROOT で更新します。ファイル システム上の絶対位置を指す MEDIA_ROOT を設定します。例えば:
MEDIA_ROOT = '/path/to/project'
2 つ目は、URL パターンを更新することです。追加
url(r'^accounts/[\.\w-]+/(mugshots/.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
url(r'^accounts/[\.\w-]+/edit/(mugshots/.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
私はこれを正しくやったのだろうか?userrena docsでそれを見逃したのだろうか?これは誰にとっても当たり前のことなのだろうか?:)