私はDjangoを試し、rls.pyを設定する方法とURLがどのように機能するかを考えています。プロジェクトのルートでrls.pyを構成して、ブログと管理者にアクセスできるようにしました。しかし、今、自宅にページを追加したいので、localhost:8000
。
そこで、プロジェクトのルートにあるrls.pyに次のコードを追加しました。
from Django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
(r"^$", direct_to_template, {"template": "base.html"}),
)
問題は、ルートのテンプレートフォルダーの代わりにblog/templates /...でテンプレートを検索することです。 base.htmlが含まれます。
完全rls.py:
from Django.conf.urls import patterns, include, url
from Django.views.generic.simple import direct_to_template
# Uncomment the next two lines to enable the admin:
from Django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r"^$", direct_to_template, {"template": "base.html"}),
url(r'^blog/', include('hellodjango.blog.urls')),
url(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
(r'^tinymce/', include('tinymce.urls')),
)
私は何かを見落としていますか?
TEMPLATE_DIRS
にsettings.py
を設定しましたか?絶対パスで正しくセットアップされていることを確認してください。これが適切に設定されていることを確認する方法です:
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/Django_templates" or "C:/www/Django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_ROOT, 'templates').replace('\\','/'),
)
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'Django.template.loaders.filesystem.Loader',
'Django.template.loaders.app_directories.Loader',
# 'Django.template.loaders.eggs.Loader',
)
このように、非アプリテンプレートに使用されるプロジェクトルートにtemplates
フォルダーがあり、各アプリにはアプリ自体の中にtemplates/appname
フォルダーがあります。
ルートテンプレートフォルダーのテンプレートを使用する場合は、'base.html'
のようなテンプレートの名前を指定するだけです。アプリテンプレートを使用する場合は、'appname/base.html'
を使用します。
フォルダー構造:
project/
appname/
templates/
appname/ <-- another folder with app name so 'appname/base.html' is from here
base.html
views.py
...
templates/ <-- root template folder so 'base.html' is from here
base.html
settings.py
views.py
...
from Django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from Django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^blog/', include('hellodjango.blog.urls')),
url(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^tinymce/', include('tinymce.urls')),
)
urlpatterns += patterns(
'Django.views.generic.simple',
(r'^', 'direct_to_template', {"template": "base.html"}),
)
URLを次のように再編成します。
urlpatterns = patterns('',
(r'^admin/doc/', include('Django.contrib.admindocs.urls')),
(r'^admin/', include(admin.site.urls)),
(r'^tinymce/', include('tinymce.urls')),
(r'^blog/', include('hellodjango.blog.urls')),
(r'^$', direct_to_template, {"template": "base.html"}),
)
パターンはその特異性によって一致するため、より具体的なパターンを最初に置く傾向があります。そうしないと、予期しない動作が発生する可能性があります。試してみてください。/
へのリクエストでブログからテンプレートをロードしている場合は、さらに掘り下げます。
それはあなたがあなたのホームページを何にしたいかによって決まると思います。あなたのサイトの他の部分へのリンクがあるページだけである場合、 catherine's answerはすてきな方法です。
たとえば、サイトのルートをブログにしたい場合は、次のようにします。
urlpatterns = patterns('',
# Django Admin
url(r'^admin/', include(admin.site.urls)),
# Tiny MCE Urls
url(r'^tinymce/', include('tinymce.urls')),
# Other App
url(r'^other/', include('projectname.other.urls', namespace='other')),
# Blog App
url(r'^', include('projectname.blog.urls', namespace='blog')),
)
また、URLに含まれる名前空間を忘れないでください: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces