昨天想直接在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
可以看到页面。
简单配置
切换到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),
]
启动服务,可以看到页面为如下所示
再次修改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 %}