[root@localhost calc]# tree -F
.
|-- admin.py
|-- apps.py
|-- __init__.py
|-- migrations/
| |-- __init__.py
| `-- __pycache__/
| `-- __init__.cpython-35.pyc
|-- models.py
|-- tests.py
`-- views.py
在mysite / urls.py
from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views
urlpatterns = [
url(r'^add/$', calc_views.add, name='add'), # 注意修改了这一行
url(r'^admin/', admin.site.urls),
]
在calc / views.py中插入代码如下:
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
a = request.GET['a']
b = request.GET['b']
c = int(a)+int(b)
return HttpResponse(str(c))
- 通过request['参数名']获取参数 , request.GET 类似于一个字典 , 更好的办法是用 request.GET.get('a', 0) , 当没有传递 a 的时候默认 a 为 0
补充:
除了使用/?a=3&b=4传参 , Django还支持使用/3/4这种方式传递参数 。
- 具体方法:
1.修改 calc / views.py 中的
def add2(request,a,b):
c = int(a)+int(b)
return HttpResponse(str(c))
然后再修改 mysites / urls.py 下的
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^add/$',calc_views.add,name='add'),
url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2'),
]
- 用括号括起来的意思是保存为一个子组,每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。中间不放 / 也可以 。
为了防止部分程序员搞不懂正则表达式中传递的变量是干什么用的 , 有时候会使用 :
url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
# 其中的 ?P<question_id> 可有可无 , 相当于助记符 。问号?不能忘了 !!!!!!
# ?P<question_id> 是Python正则表达式中的一种语法糖。