1

私は現在、60分でDjangoを使用する完全なブログエンジンと呼ばれるやや疑わしいDjangoチュートリアルをフォローしていて、6ページで立ち往生していますだから私はblogと呼ばれるDjangoプロジェクトを持っており、内部にはblogengineと呼ばれるアプリがあります。現在、TemplateDoesNotExistロードしようとすると例外が発生します

127.0.0.1:8000/blog/

完全なトレースバックは次のとおりです。

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/blog/

Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['blogengine',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

Template Loader Error:
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/home/sez/blog/templates/blogengine/post_list.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
/usr/local/lib/python2.7/site-packages/django/contrib/admin/templates/blogengine/post_list.html (File does not exist)



Traceback:
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/site-packages/django/views/generic/list_detail.py" in object_list
  107.     t = template_loader.get_template(template_name)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
  157.     template, origin = find_template(template_name)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
  138.     raise TemplateDoesNotExist(name)

Exception Type: TemplateDoesNotExist at /blog/
Exception Value: blogengine/post_list.html

で、 Djangoが/ home / sez / blog / templates / blog /'ディレクトリでテンプレートTemplate Loader Errorを検索しようとしていることがわかりますが、それでもどのように機能するかを完全には理解していません。post_list.html/home/sez/blog/templates/blogengine/' directory. To get this working I have to make Django look in theURLconf

以下は私の2つのurl.pyファイルです。最初は私のプロジェクトレベルですurl.py

from django.conf.urls.defaults import patterns, include, url
from django.views.generic.simple import direct_to_template
from blog.views import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
        (r'^admin/', include(admin.site.urls)),
        (r'^static/(.*)$',
            'django.views.static.serve',
            {'document_root': '/home/siddhion/blog/static/'}),
        (r'^(?P<template>\w+)$', direct_to_template),
        (r'^$', static_page, {'template':'base'}),
        (r'^blog/', include('blog.blogengine.urls')),
        url(r'^(?P<template>\w+)/$', static_page, name='static_page'),
        )

私が理解しているように、この行は、ディレクトリ内のファイル(r'^blog/', include('blog.blogengine.urls')),へのリダイレクト制御を指示しています。そのファイルのコードは次のとおりですurl.pyblogengine

from django.conf.urls.defaults import *
from django.views.generic import list_detail
from blog.blogengine.views import Post

urlpatterns = patterns('',
        url(r'^$',
            list_detail.object_list,
            {
                'queryset': Post.objects.all(),
                'template_object_name':'post',
            },
            name='blog_home'
            ),
    )

urls.pyでは、Djangoにpost_list.htmlテンプレートを見つけてレンダリングさせるには、ファイルをどのように編集する必要がありますか?

4

2 に答える 2

2

ファイルが存在すると仮定すると、/home/sez/blog/templates/blog/post_list.htmlDjangoにファイルを探す場所を指示するだけで済みます。どうやら、それはであなたのテンプレートを探します/home/sez/blog/templates/blogengine/。あなたはあなたので調整することによってそれを変えることができTEMPLATE_DIRSますsettings.py

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.
    '/home/sez/blog/templates/blog',
)

ただし、テンプレートサブディレクトリに対応するアプリとして名前を付けるのが一般的な方法であるためblogengine、Djangoが現在あると想定しているテンプレートをに移動することを検討することをお勧めします。

于 2011-12-16T11:57:27.573 に答える
0

template_nameパラメータを渡してどのテンプレートを明示的に指定するか、またはdjangoがテンプレートを検索post_list.htmlする/blog/blog/templates/ディレクトリに移動する(で場所を指定しなくてもTEMPLATE_DIRS) 2つのことを行うことができます。

一般的なビューに関するドキュメントから:

テンプレート名:

template_nameが指定されていない場合、このビューはデフォルトでテンプレート<app_label> /<model_name>_list.htmlを使用します。

于 2011-12-16T12:07:10.580 に答える