Django URL参数Template反向解析

一、 URL参数在view中传递

1、带参数名:通过named group方式传递指定参数,语法为: (?P<name>pattern), name 为传递参数的名称,pattern代表所要匹配的模式。如下:

  url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive)

中:year,month为参数名,而后面紧跟的则代表正则表达匹配的模式。

比如某个具体的URL为:http://0.0.0.0:8081/kingadmin/2017/09/(黄色部分为域名),对应view处理函数如下:

def month_archive(request,year,month):

  print(year,month)
   return render(request,"kingadmin/index.html",locals())

其中:app_name 和 model_name对应url中传递过来的参数值year值为:2017,month值为9

2、不带参数名:语法为: (r'pattern1/pattern2/'), pattern代表所要匹配的模式。如下:

  url(r'^(\w+)/(\w+)/$', views.table_data_list)

比如某个具体的URL为:http://0.0.0.0:8081/kingadmin/crm/customer/(黄色部分为域名),对应view处理函数如下:

def table_data_list(request,app_name,model_name):

   admin_obj = base_admin.site.registered_sites[app_name][model_name]
   return render(request,"kingadmin/table_data_list.html",locals())

其中:app_name 和 model_name对应url中传递过来的参数值app_name值为:crm,model_name值为customer

二、Templates href格式

href="{% url ‘name' params %}" rel="external nofollow"

其中:name为url.py 文件中某个url配置的name别名,params某个url对应的各个参数具体值,使用如下:

#在url.py的url中添加一个url,name参数为:name='app-views-func'
urlpatterns = [
  url(r'^(\w+)/(\w+)/(\d+)/delete/$', views.table_delete,name='table_delete'),]#
href="{% url 'table_delete' 3 2 1 %}" rel="external nofollow" #url中有三个参数(\w+)/(\w+)/(\d+),所以要传入三个具体的参数值3 2 1
生成的url如下:http://0.0.0.0:8081/3/2/1/delete/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Django模板标签中url使用详解(url跳转到指定页面)

    django {% url %} 模板标签使用 inclusions/_archives.html ... {% for date in date_list %} <li> <a href="{% url 'blog:archive' date.year date.month %}" rel="external nofollow" > {{ date.year }} 年 {{ date.month }} 月 </a> </l

  • Django路由层URLconf作用及原理解析

    一.Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] Django 2.0版本中的路由系统已经替换成下面的写法(官方文档): from django

  • Django url,从一个页面调到另个页面的方法

    创建项目和应用 django-admin startproject zqxt_views(项目名) cd zqxt_views python manage.py startapp calc(应用名) ----–1.采用/add?a=4&b=5这样GET方法进行--------- 修改 calc/view.py文件 from django.shortcuts import render from django.http import HttpResponse def add(request): a

  • django 通过url实现简单的权限控制的例子

    根据用户权限设定用户可以访问哪些页面,用django实现一个简单的demo. 1.models.py 文件 class level(models.Model): l_name = models.CharField(max_length=50,verbose_name="等级名称") l_permission = models.OneToOneField("permission") def __str__(self): return self.l_name class

  • django下创建多个app并设置urls方法

    1.创建第二个app 假设我们项目P下面已经有了一个默认的app,名字是app1.现在我想创建第二个app,名字时app2. 进入pychram下的Terminal中,运行命令: python manage.py startapp app2 此外,我在每个app下都建立一个urls.py,方便区分. 右击app名,点击"new",选择"Python File",命名为urls,确定. 2.设置url.py (1)设置P\urls.py 引入app2下的urls,然后

  • django ListView的使用 ListView中获取url中的参数值方式

    view.py from django.views.generic import ListView,DetailView from xxxx.models import Model_Name class Colortag_view(ListView): #context_object_name = '如果不指定的话在html页面中 可以使用object_list获取' context_object_name = 'object_list' #template_name='html页面所在目录'

  • Django项目主urls导入应用中views的红线问题解决

    使用PyCharm学习Django框架,从项目的主urls中导入app中的views的时候,导入的包中下面有红线报错,但是却能正常使用.要是这样也就没什么事了,但是导入之后的提示功能就丧失了,非常的不爽:网上百度了一下,竟然好多人遇到了这个问题,重要是解答的说的更是不明不白:这里记录一下详细的解决办法: 如下图,我这里就是在项目的主urls中导入一个叫blog的应用报红线,虽然运行不会报错,但是却没有了提示 解决办法: 1. 如下图,我的Django项目名称叫做 imooc_myblog_1 2

  • Django {{ MEDIA_URL }}无法显示图片的解决方式

    django模板使用media文件夹,想要在前端通过{{ MEDIA_URL }}无法显示图片,没有取到Media_url的值 解决办法: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [

  • 解决django的template中如果无法引用MEDIA_URL问题

    配置如下 TEMPLATES = [ 下面 'context_processors': [ 中添加 'django.core.context_processors.media', 会把MEDIA_URL 配置在template中 这样在template下面 就可以引用MEDIA_URL了 补充知识:在django中使用 MEDIA_URL 和 MEDIA_ROOT 在django上传图片前端使用动态的配置方法 MEDIA_ROOT 代表着 要上传的路径会和你在models中写的上传的路径进行拼节

  • Django正则URL匹配实现流程解析

    一.引子 在day17 作业中,我们查看主机详细信息的时候,是通过 在url 中拼接,传参数.urls 中匹配 path("detail/",views.detail) 这样url 变成类似 http://127.0.0.1:8000/detail/?nid=2 今天我们来学习,类似http://127.0.0.1:8000/detail-3.html 这样的URL 据说,以前我们使用的方式 ,在seo 时候算是动态页面,后面这种方式算静态页面.可能在做搜索优化的时候有好处吧. 二.开

随机推荐