BBS项目bug记录
-
模板文件多层继承时,需要在根模板中设置
block content
,子页面才能有效使用;在中间模版文件中设置block content
,子页面可能无法使用。 -
子模板使用静态文件动态解析路径时,需要重新导入
{% load static%}
-
一个html页面内标签的id值不能相同,就算是不同模态框内的也不行。
-
导航条内的注册按钮绑定的模态框,导入注册模版文件并提供注册的forms表单校验空对象,使用
inclusion_tag
比较方便。不然需要在多个视图函数内提供该表单对象。 -
功能js文件(登录、注册等)为了解耦合单独放在static文件夹内的js文件夹时,注意不能使用模版语法;此时如果在js文件内用到url的反向解析或者其他模版语法来获取变量值,一个解决的办法是将这些变量值用自定义标签属性的方式存在标签内,然后在js文件内通过DOM操作获取变量值。
-
forms表单校验时一定要在
is_valid()
调用之后再获取cleaned_data
;因为之后is_valid()之后才能有cleaned_data属性。这在源码中可以发现的。is_valid()是form表单校验执行的入口。 -
url如果出现匹配冲突,考虑两种解决方式:(1)调整url的位置;(2)重新设计url的正则表达式,如'article_comment/'和'(?P
\w+)/$'冲突,可以修改为'article/comment/' -
多个url匹配关系(分组参数个数不一样)使用一个别名,反向解析时可以用个数的个数来区分。
url(r'^(?P<username>\w+)/$', views.blog, name='blog'), # 结尾处加/$,为了和下一条url避免匹配冲突
url(r'^(?P<username>\w+)/(?P<condition>tag|category|archive)/(?P<param>.*)/', views.blog, name='blog'),
# 反向解析第一个url
target_url = reverse('blog', args=(user_obj.username,)) # 只提供一个分组参数,则解析的结果是第一个url
back_info['url'] = target_url
-
url(r'^(?P<username>\w+)/$', views.blog, name='blog')
这个url在结尾处最好加一个/
, 因为就算前端传过来的url中结尾没有/
,django默认会有一个二次加/
的重定向操作。如果这个url在设计时没有在结尾处加/
,用户直接在网址输入栏中输入url时手动加/
则无法匹配。无法匹配的原因是找不到匹配的视图函数。 -
ajax请求data参数内携带csrf_token的方式,'{{ csrf_token }}' 而不是 '{% csrf_token %}'。前提:js直接写在模版文件中才可以使用模版语法传值。
-
继续找bug.......