Django入门初步

昨天想直接在dashboard里自定义一个panel,可是说是得自己重新弄一个,为了方便调用api,就用django吧,正好dashboard也是这个框架。
django是1.11.13好老的版本了,没办法只能凑合用了。

安装

我现在windows上安装一下pip install Django==1.11.13。本来想装1.11.29一直下不下来,正好不要了。
执行django-admin.py startproject MyProject创建项目,可能会报错

Traceback (most recent call last):
  File "D:\KangSoftware\Python3.6.3\Scripts\django-admin.py", line 2, in <module>
    from django.core import management
ImportError: No module named django.core

这时候换成django-admin.exe startproject MyProject就好了。
进入MyProject文件夹下执行python manage.py runserver [port]就可以运行了,可以指定端口,默认是8000,访问127.0.0.1:8000可以看到页面。
image-1

简单配置

切换到MyProject文件夹,创建views.py

from django.http import HttpResponse

def hello(request):
	return HttpResponse('hello world')

修改urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.hello),
]

启动服务,可以看到页面为如下所示
image-2
再次修改urls.py文件如下所示

from django.conf.urls import url
from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello),
]

这时候可以通过http://127.0.0.1:8000/hello/访问网页。
但是好像是因为我的版本不够还是怎么的,我只能通过url实现,使用path会报错,如下所示

from django.conf.urls import url
from . import views

urlpatterns = [
    url('hello/', views.hello),
]

对项目进行修改的时候,不需要重启好像,他会自动监测到代码的改动,然后自动重新载入,不需要单独手动重启

模板

MyProject文件夹下新建templates文件夹
修改settings.py,修改一下DIRS路径

......
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/MyProject/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',
            ],
        },
    },
]

templates文件夹中新建一个hello.html

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

修改一下views.py,这里context字典中hello的键就代表上面的hello。

from django.http import HttpResponse
from django.shortcuts import render

def hello(request):
	context={}
	context['hello']='hello world!'
	return render(request,'hello.html',context)

访问http://127.0.0.1:8000/hello/就可以看到了。
变量语法如下,在views中就是字典

views.py中{'name':value_name}
html中{{name}}

如果传入列表的话,通过.可以取出元素

from django.shortcuts import render

def runoob(request):
    views_list = ["菜鸟教程1","菜鸟教程2","菜鸟教程3"]
    return render(request, "runoob.html", {"views_list": views_list})
<p>{{ views_list }}</p>   # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素

也可以取出字典中对应键的值。

过滤器

好像和vue差不多,也可以使用变量过滤器。
{{name | lower}}:全部小写
{{name | first | upper}}:第一个大写
{{name | truncatewords:"30}}:显示前30个字符,截断的会用省略号代替
{{name | default=‘balabalabala’}}:提供一个默认值,如果变量为其中一个,将显示default的值
{{name | length}}:返回长度,字典是键值对的个数,集合是去重后的长度
{{name | safe}}:安全转义,不转义直接输出,下面是一个超链接

from django.shortcuts import render

def runoob(request):
    views_str = "<a href='https://www.runoob.com/'>点击跳转</a>"
    return render(request, "runoob.html", {"views_str": views_str})
{{ views_str|safe }}

{{time | data:“Y-m-d”}}:时间,views.py和html如下

from django.shortcuts import render

def runoob(request):
    import datetime
    now  =datetime.datetime.now()
    return render(request, "runoob.html", {"time": now})
{{ time|date:"Y-m-d" }}

if

支持if-elif-else。

{% if condition1 %}
	display1
{% if condition2 or condition3 %}
	display2
{% else %}
	display3
{% endif %}

如下

from django.shortcuts import render

def runoob(request):
    views_num = 88
    return render(request, "runoob.html", {"num": views_num})

{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
一边玩去~
{% endif %}

for

越来越像vue了。

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

例子

from django.shortcuts import render

def runoob(request):
    views_list = ["菜鸟教程","菜鸟教程1","菜鸟教程2","菜鸟教程3",]
    return render(request, "runoob.html", {"views_list": views_list})
{% for i in views_list %}
{{ i }}
{% endfor %}

如果加一个reversed就是反向顺序{% for athlete in athlete_list reversed %}
遍历字典,传入一个字典,html中

{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}
empty

当循环的列表字典等为空的时候,执行empty中的内容。

{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    空空如也~
{% endfor %}
ifequal

如果后面两个相等显示,可以配上{% else %}

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

来源

菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值