创建第一个Django项目

安装django

pip install django

在python下import django 如果没有错误,说明安装成功,再用django.get_version() 查看版本号

创建项目

在terminal下输入 

django-admin startproject helloworld 

然后当前目录下就会出现许多文件如下图,这就创建出了一个叫helloworld 的 Django 项目。

目录介绍

1 helloworld/
2 ├── manage.py  # 管理文件,一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
3 └── helloworld  # 项目目录
4     ├── __init__.py  # 一个空文件,告诉 Python 该目录是一个 Python 包。
5     ├── settings.py  # 配置
6     ├── urls.py  # 路由 --> URL和函数的对应关系
7     └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server;一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

控制台(terminal)下运行项目

python manage.py runserver 0.0.0.0:8000

浏览器检查是否创建成功

视图和 URL 配置

在先前创建的 HelloWorld 目录下的 HelloWorld 目录新建一个 view.py 文件,并输入代码:

1 from django.http import HttpResponse
2 
3 def hello(request):
4  return HttpResponse("Hello world ! ")

接着,绑定 URL 与视图函数。打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中(Django 1.6 如果报错,就使用“from django.conf.urls.defaults import”):

1 from django.conf.urls import url
2 from . import view
3 
4 urlpatterns = [
5     url(r'^$', view.hello),
6 ]

完成后,启动 Django 开发服务器,并在浏览器访问打开浏览器并访问:

Django 模板

上面使用 django.http.HttpResponse() 来输出"Hello World!"将数据与视图混合在一起,不符合Django的MVC思想。

接下来的模板是一个文本,用于分离文档的表现形式和内容

创建模板

在 HelloWorld 目录底下创建 templates 目录并建立 hello.html文件

<h1>{{ hello }}</h1>   变量使用了双括号

接下来需要向Django说明模板文件的路径,修改settings.py,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",],如下所示:

 1 TEMPLATES = [
 2     {
 3         'BACKEND': 'django.template.backends.django.DjangoTemplates',
 4         'DIRS': [BASE_DIR+"/templates",],
 5         'APP_DIRS': True,
 6         'OPTIONS': {
 7             'context_processors': [
 8                 'django.template.context_processors.debug',
 9                 'django.template.context_processors.request',
10                 'django.contrib.auth.context_processors.auth',
11                 'django.contrib.messages.context_processors.messages',
12             ],
13         },
14     },
15 ]

现在修改 view.py,增加一个新的对象,用于向模板提交数据:

1 # -*- coding: utf-8 -*-
2 
3 #from django.http import HttpResponse
4 from django.shortcuts import render
5 
6 def hello(request):
7     context          = {}
8     context['hello'] = 'Hello World!'
9     return render(request, 'hello.html', context)

可以看到,我们这里使用render来替代之前使用的HttpResponse。render还使用了一个字典context作为参数。

context 字典中元素的键值 "hello" 对应了模板中的变量 "{{ hello }}"。

再访问访问http://127.0.0.1:8000/hello,可以看到页面:

这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。

django模板标签

if/else

{% if condition1 %}
   ... display 1
{% elif condiiton2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

for(可嵌套)

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

ifequal/ifnotequal

{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

注释

{# 这是一个注释 #}

过滤器

{{ name|lower }} 文档大写转换文本为小写。

{{ my_list|first|upper }} 将第一个元素并将其转化为大写。
{{ bio|truncatewords:"30" }}  显示变量 bio 的前30个词。
{{ pub_date|date:"F j, Y" }} 按指定的格式字符串参数格式化 date 或者 datetime 对象

includ 标签

{% include "nav.html" %}  允许在模板中包含其它的模板的内容。

模板继承

在创建项目的 templates 目录中添加 base.html 文件,代码如下:

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    <h1>Hello World!</h1>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
  </body>
</html>

以上代码中,名为mainbody的block标签是可以被继承者们替换掉的部分。

所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。

hello.html中继承base.html,并替换特定block,hello.html修改后的代码如下:

{% extends "base.html" %}

{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

第一行代码说明hello.html继承了 base.html 文件。可以看到,这里相同名字的block标签用以替换base.html的相应block。

重新访问地址http://127.0.0.1:8000/hello/,输出结果如下:

原文地址:https://www.cnblogs.com/dummersoul/p/12199854.html