1月25日学习内容整理:URL的反向解析和名称空间知识补充,Django项目连接mysql
一、URL反向解析补充
1、url方法的name参数,也就是别名
from django.conf.urls import url from . import views urlpatterns = [ #... url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'), #... ]
(1)在模版文件中:{% url "name参数值" %}
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a> <ul> {% for yearvar in year_list %} <li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li> {% endfor %} </ul>
(2)在视图函数中:
reverse("name参数值")就代表对应的URL地址,args代表URL中的参数,比如说URL中带有有名或无名分组,传递到后端的参数就用args表示
from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect def redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
2、名称空间
django在反向解析URL的时候会默认从全局urls文件找,然后在依次找app中的,若某两个name参数重复了那就会出问题,所以我们就要指定反向查找的范围
这就引入名称空间namespace
(1)应用:
全局urls文件中
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include("app01.urls",namespace="app01")), url(r'^app02/', include("app02.urls",namespace="app02")), ]
app01文件中的urls文件
urlpatterns = [ url(r'^index/', index,name="index"), ]
app02文件中的urls文件
urlpatterns = [ url(r'^index/', index,name="index"), ]
如上,app01和app02的name参数重复了,这样的话会出问题,所以我们在全局urls文件中指定好namespace参数,这个参数值没有特定的指代意义,随便取
在app01和app02的视图中
reverse("namespace参数值:name参数值") 这里的参数值一定要和设置值一一对应,所以namespace值没有特定的意义,只要在这里保持一致就可以
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app01:index"))
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app02:index"))
二、django项目连接mysql,不再用默认的db.sqlite3
(1)settings.py中设置
一定要注意:数据库一定要先创建好,HOST就是ip地址
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day107', #你的数据库名称 'USER': 'root', #你的数据库用户名 'PASSWORD': '', #你的数据库密码 'HOST': '', #你的数据库主机,留空默认为localhost 'PORT': '3306', #你的数据库端口 } }
(2)此时做数据库迁移时会报错,因为默认采用的是MySQLdb,py3已经就采用pymysql模块了,所以需要做一下替换
在app或者项目全局的初始化__init__文件中加入:
import pymysql pymysql.install_as_MySQLdb()