• python django


    #大部分来自于http://www.runoob.com/django

    1.创建第一个项目:

    django-admin.py startproject HelloWorld

    $ cd HelloWorld/
    $ tree
    .
    |-- HelloWorld
    |   |-- __init__.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- manage.py

    目录说明:

    • HelloWorld: 项目的容器。
    • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
    • HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
    • HelloWorld/settings.py: 该 Django 项目的设置/配置。
    • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
    • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

    接下来我们进入 HelloWorld 目录输入以下命令,启动服务器:

    python manage.py runserver

    视图和 URL 配置

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

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

    接着,绑定 URL 与视图函数。打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

    from django.conf.urls import url
     
    from . import view
     
    urlpatterns = [
        url(r'^$', view.hello),
    ]

    整个目录结构如下:

    $ tree
    .
    |-- HelloWorld
    |   |-- __init__.py
    |   |-- __init__.pyc
    |   |-- settings.py
    |   |-- settings.pyc
    |   |-- urls.py              # url 配置
    |   |-- urls.pyc
    |   |-- view.py              # 添加的视图文件
    |   |-- view.pyc             # 编译后的视图文件
    |   |-- wsgi.py
    |   `-- wsgi.pyc
    `-- manage.py

    url() 函数

    Django url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。

    regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。

    view: 用于执行与正则表达式匹配的 URL 请求。

    kwargs: 视图使用的字典类型的参数。

    name: 用来反向获取 URL。

    2.Django 模板

    HelloWorld/
    |-- HelloWorld
    |   |-- __init__.py
    |   |-- __init__.pyc
    |   |-- settings.py
    |   |-- settings.pyc
    |   |-- urls.py
    |   |-- urls.pyc
    |   |-- view.py
    |   |-- view.pyc
    |   |-- wsgi.py
    |   `-- wsgi.pyc
    |-- manage.py
    `-- templates
        `-- hello.html

    hello.html 文件代码如下:

    <h1>{{ hello }}</h1>

    从模板中我们知道变量使用了双括号。

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

    ...
    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+"/templates",], # 修改位置 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] ...

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

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

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

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

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

    接下来我们将具体介绍模板中常用的语法规则。

    if/else 标签

    {% if condition1 %}
       ... display 1
    {% elif condition2 %}
       ... 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" }}
    {{ pub_date|date:"F j, Y" }}

    include 标签

    {% include "nav.html" %}

    模板继承

    接下来我们先创建之前项目的 templates 目录中添加 base.html 文件,代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
        <h1>Hello World!</h1>
        <p>菜鸟教程 Django 测试。</p>
        {% 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。

  • 相关阅读:
    qmake复制文件
    py3 execfile实现
    联合索引特殊案例
    pytest html
    问题|安装ts时报错:EACCES: permission denied, access '/usr/local/lib/node_modules’。意为没有权限(安装其他的也报这个错误如:cnpm install g @vue/cli)。
    问题|苹果电脑android studio 同步时,报警告License for package Android SDK BuildTools 29.0.2not accepted
    问题|iframe监听时,菜单栏初始状态为放开时,点击按钮菜单栏可收缩;而菜单栏初始状态为防收缩时,点击按钮菜单栏呈放开状态。
    问题|全局安装liveserver时(npm install g liveserver),安装成功,但启动项目时报错,(****not commond)
    问题|当iview表单进行校验的时候,有数据还进行校验
    问题|当在远程拉取一个分支后(如user20210720),在本地新建一个分支并切换到此分支(如816),修改完代码后想要上传到新建的远程的另一个分支(如dev_local), 此时,在终端直接切换远程的另一个分支会报错: error: pathspec 'dev_local' did not match any file(s) known to git。
  • 原文地址:https://www.cnblogs.com/CGAlpha/p/7976236.html
Copyright © 2020-2023  润新知