zoukankan      html  css  js  c++  java
  • 创建第一个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/,输出结果如下:

  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/dummersoul/p/12199854.html
Copyright © 2011-2022 走看看