32

私は Django を試していて、urls.pyを設定する方法と、URL がどのように機能するかを考えています。プロジェクトのルートにurls.pyを構成して、ブログと管理者に誘導します。しかし今、私は自分のホームにページを追加したいので、localhost:8000.

そこで、プロジェクトのルートにあるurls.pyに次のコードを追加しました。

from django.views.generic.simple import direct_to_template

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

問題は、ルートのテンプレート フォルダーではなく、 blog/templates/...でテンプレートを検索することです。base.htmlが含まれています。

完全なurls.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')),
)

私は何かを見落としていますか?

4

5 に答える 5

63

あなたはあなたに設定TEMPLATE_DIRSしましたsettings.pyか?絶対パスで正しく設定されていることを確認してください。これは、適切に設定されていることを確認する方法です。

設定.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
  ...
于 2013-03-14T14:18:51.417 に答える
4
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"}),
)
于 2013-03-14T14:37:44.993 に答える
2

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"}),
)

パターンはその特異性によって照合されるため、より具体的なパターンを最初に配置する傾向があります。そうしないと、予期しない動作が発生する可能性があります。試してみて、 へのリクエストでブログからテンプレートをまだ読み込んでいる場合は、/さらに掘り下げます。

于 2013-03-14T14:01:44.840 に答える
0

ホームページをどうしたいかによると思います。それがあなたのサイトの他の部分へのリンクを含む単なるページである場合、キャサリンの答えはきれいな方法です.

たとえば、サイトのルートをブログにしたい場合は、次のようにします。

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

于 2013-03-14T16:32:01.117 に答える