文本编辑
下载kindeditor放在static下面
image.png
在网页add_artcile.html中加入
{% block js %}
{% load static %}
<script type="text/javascript" src="{% static 'kindeditor/kindeditor-all.js' %}"></script>
<script type="text/javascript" src="{% static 'kindeditor/lang/zh-CN.js' %}"></script>
<script type="text/javascript">
KindEditor.ready(function(K) {
window.editor = K.create('#editor_id',{
uploadJson:'/util/upload/kindeditor'
});
});
</script>
{% endblock %}
image.png
在展示的页面art.html中加入过滤器(safe)
safe--就是渲染标签的样式
image.png
python中的过滤器
1、add :将value的值增加2。使用形式为:{{ value | add: "2"}}。
2、addslashes:在value中的引号前增加反斜线。使用形式为:{{ value | addslashes }}。
3、capfirst:value的第一个字符转化成大写形式。使用形式为:{{ value | capfirst }}。
4、cut:从给定value中删除所有arg的值。使用形式为:{{ value | cut:arg}}。
5、date: 格式化时间格式。使用形式为:{{ value | date:"Y-m-d H:i:s" }}
6、default:如果value是False,那么输出使用缺省值。使用形式:{{ value | default: "nothing" }}。例如,如果value是“”,那么输出将是nothing
7、default_if_none:如果value是None,那么输出将使用缺省值。使用形式:{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
8、dictsort:如果value的值是一个字典,那么返回值是按照关键字排序的结果
使用形式:{{ value | dictsort:"name"}},例如,
如果value是:
[{'name': 'python'},{'name': 'java'},{'name': 'c++'},]
那么,输出是:
[{'name': 'c++'},{'name': 'java'},{'name': 'python'}, ]
9、dictsortreversed:如果value的值是一个字典,那么返回值是按照关键字排序的结果的反序。使用形式:与dictsort过滤器相同。
10、divisibleby:如果value能够被arg整除,那么返回值将是True。使用形式:{{ value | divisibleby:arg}},如果value是9,arg是3,那么输出将是True
11、escape:替换value中的某些字符,以适应HTML格式。使用形式:{{ value | escape}}。例如,< 转化为 <> 转化为 >' 转化为 '" 转化为 "
13、filesizeformat:格式化value,使其成为易读的文件大小。使用形式:{{ value | filesizeformat }}。例如:13KB,4.1MB等。
14、first:返回列表/字符串中的第一个元素。使用形式:{{ value | first }}
16、iriencode:如果value中有非ASCII字符,那么将其进行转化成URL中适合的编码,如果value已经进行过URLENCODE,改操作就不会再起作用。使用形式:{{value | iriencode}}
17、join:使用指定的字符串连接一个list,作用如同python的str.join(list)。使用形式:{{ value | join:"arg"}},如果value是['a','b','c'],arg是'//'那么输出是a//b//c
18、last:返回列表/字符串中的最后一个元素。使用形式:{{ value | last }}
19、length:返回value的长度。使用形式:{{ value | length }}
20、length_is:如果value的长度等于arg的时候返回True。使用形式:{{ value | length_is:"arg"}}。例如:如果value是['a','b','c'],arg是3,那么返回True
21、linebreaks:value中的"\n"将被<br/>替代,并且整个value使用</p>包围起来。使用形式:{{value|linebreaks}}
22、linebreaksbr:value中的"\n"将被<br/>替代。使用形式:{{value |linebreaksbr}}
23、linenumbers:显示的文本,带有行数。使用形式:{{value | linenumbers}}
24、ljust:在一个给定宽度的字段中,左对齐显示value。使用形式:{{value | ljust}}
25、center:在一个给定宽度的字段中,中心对齐显示value。使用形式:{{value | center}}
26、rjust::在一个给定宽度的字段中,右对齐显示value。使用形式:{{value | rjust}}
27、lower:将一个字符串转换成小写形式。使用形式:{{value | lower}}
30、random:从给定的list中返回一个任意的Item。使用形式:{{value | random}}
31、removetags:删除value中tag1,tag2....的标签。使用形式:{{value | removetags:"tag1 tag2 tag3..."}}
32、safe:当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换。使用形式:{{value | safe}}
33、safeseq:与safe基本相同,但有一点不同的就是:safe是针对字符串,而safeseq是针对多个字符串组成的sequence
34、slice:与python语法中的slice相同。使用形式:{{some_list | slice:"2"}}
37、striptags:删除value中的所有HTML标签.使用形式:{{value | striptags}}
38、time:格式化时间输出。使用形式:{{value | time:"H:i"}}或者{{value | time}}
39、title:转换一个字符串成为title格式。
40、truncatewords:将value切成truncatewords指定的单词数目。使用形式:{{value | truncatewords:2}}。例如,如果value是Joel is a slug 那么输出将是:Joel is ...
42、upper:转换一个字符串为大写形式
43、urlencode:将一个字符串进行URLEncode
44、wordcount:返回字符串中单词的数目
日志 logging
创建一个log文件夹 里面存放日志文件
在工程目录下settings.py里面设置
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'utils.middleware.LogMiddleware',
] #加入utils.middleware.LogMiddleware中间件
# 日志配置
LOG_PATH = os.path.join(BASE_DIR, 'log')
LOGGING = {
# 必须设置为1
'version': 1,
# 禁止日志
'disable_existing_loggers': False,
# 格式化组件
'formatters': {
'default': {
'format': '%(message)s'
}
},
# logger接收日志 handler处理
'loggers': {
'': {
'handlers': ['console'],
'level': 'INFO'
}
},
# handlers处理日志
'handlers': {
'console': {
'level': 'INFO',
'filename': '%s/day08log.log' % LOG_PATH,
'formatter': 'default',
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 5 * 1024 * 1024
}
}
}
创建一个utils文件夹,
在创建一个middleware.py在里面写
import time
import logging
from django.utils.deprecation import MiddlewareMixin
# 获得logger
log = logging.getLogger(__name__)
class LogMiddleware(MiddlewareMixin):
def process_request(self, request):
# 绑定在request上一个属性,表示访问的时间
request.init_time = time.time()
def process_response(self, request, response):
# 请求url耗时时间
count_time = time.time() - request.init_time
# 响应状态码
code = response.status_code
# 请求的地址
path = request.path
# 请求方法
method = request.method
# 响应内容
try:
content = response.content
except Exception:
content = ''
# 需要打印的日志信息
log_str = '%s %s %s %s %s ' % (path, method, code,
count_time, content)
# 交给logger处理日志
log.info(log_str)
return response
然后访问网站任意目录
日志文件就会有信息
网友评论