我倾向于对大多数Django项目使用相同的项目模板。到目前为止,我一直在使用复制粘贴在不同项目中使用模板。
(抱歉!我没有意识到--template
随附的django-admin
选项。)
一段时间前,我认识了--template
的{{1}}选项,对此有疑问。
我在我的项目中使用的上述模板具有一些常见的Django应用,即django-admin
用于处理用户身份验证,accounts
用于处理对“关于”,“联系”等页面的请求以及一些通用的Django模板,例如pages
,用于帐户激活电子邮件和密码重置电子邮件的模板。
一些通用Django模板(例如“登录”模板)在其中扩展了base.html
。这就是问题所在。
尝试在新项目中使用项目模板时出现错误base.html
。
跟踪:
django.template.exceptions.TemplateDoesNotExist: base.html
$ django-admin startproject --template=/home/alfarhanzahedi/Projects/django-boilerplate/project_name --extension=py,html simpleqa
Traceback (most recent call last):
File "/home/alfarhanzahedi/Projects/temp/venv/bin/django-admin", line 10, in <module>
sys.exit(execute_from_command_line())
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/commands/startproject.py", line 20, in handle
super().handle('project', project_name, target, **options)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/core/management/templates.py", line 154, in handle
content = template.render(context)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 176, in render
template = context.template.engine.get_template(template_name)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/engine.py", line 143, in get_template
template, origin = self.find_template(template_name)
File "/home/alfarhanzahedi/Projects/temp/venv/lib/python3.7/site-packages/django/template/engine.py", line 129, in find_template
raise TemplateDoesNotExist(name, tried=tried)
django.template.exceptions.TemplateDoesNotExist: base.html
中的设置已正确配置,因为项目模板似乎可以通过settings.py
正常运行。所有Django模板均可正确加载。
我知道在项目模板中包含Django模板几乎没有帮助(或灵活性?),但是我只是想知道此错误是否有解决方案!
我看到python manage.py runserver
有--settings
选项。我尝试使用它,但无济于事!
有没有解决这个问题的方法?
谢谢!
答案 0 :(得分:0)
使用选项--template=... --extension=py,html
时,Django将在项目创建过程中渲染 all 个模板文件。这意味着您必须在项目创建期间转义要Django忽略的所有模板标签。
将模板的项目特定位放入您的设置中,然后使用上下文处理器将其传递给模板可能会更容易。
如果您在多个项目中使用相同的应用程序,则可能还需要考虑将它们转换为reusable app。