如何在没有服务器的情况下按原样使用 Django 模板
Posted
技术标签:
【中文标题】如何在没有服务器的情况下按原样使用 Django 模板【英文标题】:How to use Django templating as is without server 【发布时间】:2016-03-22 00:14:13 【问题描述】:我使用 Django 纯粹是为了创建模板(没有服务器)。 这是我的方案:
page1.html
% extends "base.html" %
% block 'body' %
<div class="container">
<img src="./images/filename" style="padding-top:100px; padding-left:100px" align="center" heig
</div>
% endblock %
base.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../src/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../src/sticky-footer-navbar.css">
<link rel="icon" href="../images/favicon.ico">
<title>MY TITLE</title>
</head>
<body>
<!-- Fixed navbar -->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">Adjuvant</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="../index.html">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="mailto:foo@yahoo.com">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<!-- End navbar -->
<!--- BEGIN INSERT TEMPLATE FOR OTHER PAGE HERE-->
% block 'body' %
% endblock %
<!--- END TEMPLATE FOR OTHER PAGE HERE-->
<footer class="footer">
<div class="container">
<p class="text-muted"> © 2015 ·
</p>
</div>
</footer>
<!-- Bootstrap core javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="../src/jquery-1.11.0.min.js"><\/script>')</script>
<script src="../src/bootstrap.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="../src/ie10-viewport-bug-workaround.js"></script>
</body>
</html>
code_to_make_template.py
from django.template import Template, Context, loader
from django.conf import settings
settings.configure()
template = open("htmls/src/templates/page1.html" ).read()
t = Template(template)
filename = "mypicture.svg"
c = Context('filename':filename)
output_string = t.render(c)
目录结构如下:
current_dir
|___ code_to_make_template.py
|___ html
|_ src
|_ templates
|_ base.html
|_ page1.html
但是当我运行code_to_make_template.py
时,我收到了这条消息:
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
正确的做法是什么?
【问题讨论】:
这里提出了完全相同的问题:***.com/questions/98135/… 【参考方案1】:只是为了确保我理解这一点,您是否希望基于 django 模板引擎生成常规 html 页面?如果是这样,我一直在使用django-medusa 静态站点生成器。也许这对你正在做的事情来说太过分了,但我用它来运行一个本地 django 实例和通用静态 html,然后我将它们上传到各个地方(godaddy、s3 等)。
设置起来有点麻烦,但是有了它,您不仅可以轻松使用 django 模板系统,还可以轻松使用模型、查询等。
【讨论】:
【参考方案2】:django.core.exceptions.AppRegistryNotReady:应用尚未加载。
根据Standalone scripts 文档段落,您只需要设置Django:
>>> from django.conf import settings
>>> settings.configure()
>>>
>>> import django
>>> django.setup()
>>>
>>> from django.template import Template, Context, loader
>>> t = Template("Hello, name")
>>> c = Context('name': 'world')
>>> t.render(c)
u'Hello, world'
【讨论】:
当你打电话给django.setup()
时你还需要settings.configure()
吗?
@approxiblue 恐怕是的,如果之前没有调用configure()
,就会得到django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
..谢谢!【参考方案3】:
如果您不想实际使用 django 模型/应用程序等,如果您想使用 apache 或 nginx 等其他东西来服务输出为纯 html。
【讨论】:
Django 默认使用 Django 模板语言,这是 Jinja 的灵感来源。 Django 也支持 Jinja。以上是关于如何在没有服务器的情况下按原样使用 Django 模板的主要内容,如果未能解决你的问题,请参考以下文章
R:如何在不使用循环的情况下按唯一向量顺序查找所有重复向量值的索引?