您的位置:首页 > 编程语言 > Go语言

django笔记

2020-04-04 18:25 921 查看

django

Django 模板

html
1.变量:用两个大括号括起来的文字(例如 {{ person_name }} )是 变量 (variable) 。这意味着将 按照给定的名字插入变量的值。
2.模板标签:被大括号和百分号包围的文本。DJANGO内建很多模板标签和过滤器。block,extends,filter,comment,cycle,debug,for,if。
(例如 {% if ordered_warranty %} )是 模板标签 (template tag) 。标签(tag)定义比较明确,即:仅通知模板系统完成某些工作的标签。
3.filter 过滤器,它能让你用来转换变量的输出.例如 {{ship_date|date:“F j, Y” }} 将变量 ship_date 用 date 过滤器来转换, 转换的参数是 “F j, Y” .
date 过滤器根据指定的参数进行格式输 出.过滤器是用管道字符 ( | )来调用的,就和 Unix 管道一样.
参数传递
网页模板:“My name is {{ name }}.”)
字典映射:context 在 Django 里表现为 Context 类,在 django.template 模块里。 它构造是有一个可选参数:一个字典映射变量和它们的值。例如:c = Context({“name”: “Stephane”})
调用 Template 对象 的 render() 方法并传递 context 来填充模板: t.render©

模板标签的使用

if

{% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% else %}
<p>Get back to work.</p>
{% endif %}

模板标签在 python 中空的列表 ( [] ),tuple( () ),字典( {} ),字符串( ‘’ ),零( 0 ),还有 None 对象,在逻辑判断中都为假,其他的情况都为真。

for

{% for %} 允许我们在一个序列上迭代。与 Python 的 for 语句的情形类似,循环语法是 for X in Y ,Y 是要迭代的序列而 X 是在每一个特定的循环中使用的变量名称。每一次循环中, 模板系统会渲染在 {% for %} and {% endfor %} 中的所有内容。
例如,给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表:

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>

注释

象 HTML 和其他的语言例如 python 一样,Django 模板系统也允许注释。 注释使用 {# #} :
{# This is a comment #}
注释的内容不会在模板渲染时输出。
注释不能跨多行

过滤器

模板过滤器是在变量被显示前修改它的值的一个简单方法。 过滤 器看起来是这样的:
{{ name|lower }}
显示的内容是变量 {{ name }} 被过滤器 lower 处理后的结果,它功能是转换文本为小写。
使用 | 来应用过滤器。
include 模板标签
该标签允许在(模板中)包含其它的模板的内容。标签的参数是所要包含的模板名称,可以 是一个变量,也可以是用单/双引号硬编码的字符串。
每当在多个模板中出现相同的代码时, 就应该考虑是否要使用 {% include %} 来减少重复。

下面的例子包含了 includes/nav.html 模板的内容:
{% include ‘includes/nav.html’ %}
下面的例子包含了以变量 template_name 的值为名称的模板内容:
{% include template_name %}

*在 Django 模板中是不可能直接调用 Python 代码的

render_to_response()
由于加载模板、填充 context 、将经解析的模板结果返回为 HttpResponse 对象这一系列操 作实在太常用了,Django 提供了一条仅用一行代码就完成所有这些工作的捷径。
该捷径就是 位于 django.shortcuts 模块中名为 render_to_response() 的函数。大多数时候,你将使 用 render_to_response() ,而不是手动加载模板、创建
Context 和 HttpResponse 对象。

下面就是使用 render_to_response() 重新编写过的 current_datetime 范例。

from django.shortcuts import render_to_response import datetime

def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date': now})

模型

Django 提供了实用工具来从现有的数据库表中自动扫描生成模型。
除非你指定,否则 Django 会自动为每个模型创建一个叫做 id 的主键。每个 Django 模型必须要有一个单列主键。
python manage.py validate
检查你的模型的语法和逻辑是否正确。如果一切正常,你会看到 0 errors found 消息

__str__() 方法告诉 Python 要怎样把对象当作字符串来使用
请确保你的每一个模型里都包含 __str__() 方法,这不只是为了交互时方便,也是因为 Django 会在其他一些地方用 __str__() 来显示对象。

要保存这个记录到数据库里(也就是执行 INSERT SQL 语句),调用对象的 save() 方法:
>>> p.save()
接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL 语句,而不是 INSERT 语句):
>>> p.name = 'Apress Publishing'
>>> p.save()

查找所有数据的方法了:
>>> Publisher.objects.all()
数据过滤
如果想要获得数据的一个子集,我们可以使用 filter() 方法:
>>> Publisher.objects.filter(name="Apress Publishing") [<Publisher: Apress Publishing>]

>>> Publisher.objects.filter(name__contains="press") [<Publisher: Apress Publishing>]
在 name 和 contains 之间有双下划线。象 Python 自己一样,Django 也使用 双下划线来做 一些小魔法,这个 __contains 部分会被 Django 转换成 LIKE SQL 语句:
name LIKE '%press%';

有时你只想获取单个对象,这个时候使用 get() 方法:
>>> Publisher.objects.get(name="Apress Publishing")
<Publisher: Apress Publishing>
所以,如果结果是多个对象或者没有返回结果,也会导致抛出异常

数据排序
order_by() 来 排列 返回的数据:
>>> Publisher.objects.order_by("name")
[<Publisher: Apress Publishing>, <Publisher: Addison-Wesley>, <Publisher: O'Reilly>]
我们还可以指定逆向排序,在前面加一个减号 - 前缀

限制返回的数据
另一个常用的需求就是取出固定数目的记录。想象一下你有成千上万的出版商在你的数据库 里, 但是你只想显示第一个。你可以这样做:
>>> Publisher.objects.all()[0]

删除对象
要删除对象,只需简单的调用对象的 delete() 方法:
>>> p = Publisher.objects.get(name="Addison-Wesley") >>> p.delete(
你还可以批量删除对象,通过对查询的结果调用 delete() 方法:
>>> publishers = Publisher.objects.all() >>> publishers.delete()

djangoadmin

admin.site.register(SalaryItem,SalaryItemAdmin)  #注册model类到admin
@admin.register(Book)  #使用register的装饰器
  • 点赞
  • 收藏
  • 分享
  • 文章举报
weixin_43313367 发布了9 篇原创文章 · 获赞 0 · 访问量 132 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: