Django之路由

 1.获取url中传递的值,通过反射到相应的表中执行增删改查。

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^delete/表名/id值/')
    # 在url中加入分组,就可以把url中的值传递到view中
    url(r'^delete/([a-zA-Z]+)/(\d+)/$',views.delete),
    # 什么都匹配不上,默认转到此页面
    url(r'^$',views.home),
]
from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.


def delete(request,table_name,delete_id):
    print(table_name,delete_id)
    # 需要判断一下,表名和id值是否都是正经的数据
    # 从另一个文件 根据字符串 反射具体的变量
    table_name = table_name.capitalize()
    if hasattr(models,table_name):
        # 如果能找到
        table_class = getattr(models,table_name)
        try:
            table_class.objects.get(id=delete_id).delete()
        except Exception as e:
            print(str(e))
            print("id值不存在!")
        return HttpResponse("表名:{}\nid:{}".format(table_name,delete_id))
    else:
        return HttpResponse('表不存在!')

 2.url中的弱匹配:

  防止以后频繁更改url时,相关的代码都要更改的情况。

# 下面两种情况,
# 第一种情况,url改动之后,相应的a标签也要改动,变一次改一次
# 第二种情况,url改动之后,只要name='home'不改变,a标签就不需要改动。 url(r'^home/$',views.home), url(r'^home666/$',views.home,name="home"),
# 这是在HTML页面中把url写死的结局:page not found
<a href="home">首页</a>
<a href="{% url 'home' %}">首页</a>
即使再变成url(r'^home45613249841/$',views.home,name="home"),第二个a标签还是可以找到。

在html中反向解析:

在views中反向解析:

# 在视图中的反射,reversed
from django.urls import reverse
def test(request):
    print("首页的url是:",reverse("home",args=("house",)))
    return render(request,"test.html")

 

posted @ 2019-11-01 09:38  会飞的发如雪  阅读(119)  评论(0)    收藏  举报