我继承了一个要维护的Django项目,尽管完成了本教程,但是当我遍历所有这些项目代码时,我仍然感觉有些迷失,并且一经点击模板,便普遍缺乏理解。
我有一个叫做Student的模型,定义如下
class Student(models.model);
True
studentID = models.CharField(max_length = 6, primary_key = True)
age = models.IntegerField()
为了简洁起见,省略了一些其他字段。
现在,我在该网页上有一个HTML文件,要在views.py中显示当前学生的分数(当前学生被定义为当前正在访问该页面的学生,由其学生ID标识),我可以通过
currentStudent = Student.objects.get(studentID = request.session['studentID'])
我的问题:在我的HTML文件中,如何在文本块的一部分中显示当前学生的年龄?
Django提取您的html文件并填写空白。
您可以告诉它空白在哪里使用双括号{{ somevar }}
或如下所示的许多内置标签之一(例如“ for”){% sometag %}
。需要花一些时间来学习如何使用它,并学习所有可用的选项(文档很棒),但是很容易理解基础知识。这里有很多例子:
views.py
def example(request):
template = 'index.html'
context = {'myvar': 'hello world'}
return render_to_response(template, context)
index.html
<body>
<h1> {{ myvar }} </h1>
</body>
结果:
<body>
<h1> hello world </h1>
</body>
如您所见,render_to_response采用模板名称,然后填写空白。它使用index.html,查看上下文字典,查找的所有出现{{ myvar }}
并将其替换为hello world
。
说我有一个名为MyModel
哪个模型的字段MyData
?要显示它,只需将它与上下文一起发送:
def example(request):
template = 'index.html'
context = {'myvar': MyModel.objects.get(pk=1)}
return render_to_response(template, context)
index.html
<body>
<h1> {{ myvar.MyData }} </h1>
</body>
第二个例子:
views.py
def example_fortag(request):
template = 'fortag.html'
context = {'mylist': [1, 2, 3]}
return render_to_response(template, context)
fortag.html
<body>
{% for item in mylist %}
<h1>{{ item }}</h1>
{% endfor %}
</body>
结果将如下所示:
<body>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
</body>
得到它?这是使用if标记的示例:
views.py:
def example_iftag(request):
template = 'iftag.html'
context = {'mylist': range(1, 10)}
return render_to_response(template, context)
iftag.html:
<body>
{% for item in mylist %}
{% if item / 2 == 0 %}
<h1>{{ item }}</h1>
{% endif %}
{% endfor %}
</body>
结果将如下所示:
<body>
<h1>2</h1>
<h1>4</h1>
<h1>6</h1>
<h1>8</h1>
</body>
您也可以做复杂的事情。假设您将字典作为变量发送:
context = {'myvar': {'key': 'value'}}
你可以这样做:
{% for key, value in myvar.items %}
... etc ...
看到?我使用的是items函数,它是python语言中字典对象的内置函数(请注意,我不需要使用调用函数()
)。
考虑到所有这些,我强烈建议您再读一遍本教程的第三部分,并慢慢学习。Django的模板语言非常直观并且功能非常强大,希望这对您有所帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句