Django自动获取项目中的全部URL

from django.utils.module_loading import import_string
from django.conf import settings
# for django 1.0
# from django.urls import RegexURLResolver, RegexURLPattern
# for django 2.0
from django.urls.resolvers import URLResolver, URLPattern

def recursion_urls(pre_namespace, pre_url, urlpatterns, url_ordered_dict):
    """
    递归的去获取URL
    :param per_namespace: namespace前缀,以后用户拼接name
    :param per_url: url前缀,以后用于拼接url
    :param urlpatterns: 路由关系列表
    :param url_ordered_dict: 用于保存递归中获取的所有路由
    :return:
    """
    for item in urlpatterns:
        if isinstance(item, URLPattern):  # 非路由分发
            if not item.name:
                continue
            if pre_namespace:
                name = ‘%s:%s‘ % (pre_namespace, item.name)
            else:
                name = item.name
            url = pre_url + str(item.pattern)

            url_ordered_dict[name] = {‘name‘: name, ‘url‘: url.replace(‘^‘, ‘‘).replace(‘$‘, ‘‘)}
        elif isinstance(item, URLResolver):
            if pre_namespace:
                if item.namespace:
                    namespace = ‘%s:%s‘ % (pre_namespace, item.namespace)
                else:
                    namespace = pre_namespace
            else:
                if item.namespace:
                    namespace = item.namespace
                else:
                    namespace = None
            recursion_urls(namespace, pre_url + str(item.pattern), item.url_patterns, url_ordered_dict)

def get_all_url_dict():
    """
    获取项目中所有的URL
    :return:
    """
    url_ordered_dict = OrderedDict()
    md = import_string(settings.ROOT_URLCONF)
    recursion_urls(None, ‘/‘, md.urlpatterns, url_ordered_dict)  # 递归去获取所有的路由
    return url_ordered_dict

原文地址:https://www.cnblogs.com/xiangxiaolin/p/11185081.html

时间: 2024-10-09 09:11:07

Django自动获取项目中的全部URL的相关文章

自动发现项目中的URL,django1版本和django2版本

一.django 1 版本 routers.py import re from collections import OrderedDict from django.conf import settings from django.utils.module_loading import import_string # 根据字符串的形式,帮我们去导入模块 from django.urls import RegexURLResolver, RegexURLPattern # 路由分发:URLReso

权限组件(12):自动发现项目中有别名的URL

自动发现项目中所有有别名的URL,效果如下: customer_list {'name': 'customer_list', 'url': '/customer/list/'} customer_add {'name': 'customer_add', 'url': '/customer/add/'} customer_edit {'name': 'customer_edit', 'url': '/customer/edit/(?P<cid>\\d+)/'} customer_del {'na

验证码自动填充项目中观察者模式分析

观察者模式 观察者模式定义了对象之间的一对多依赖,当一个对象状态发生改变时,其依赖者便会收到通知并做相应的更新.其原则是:为交互对象之间松耦合.以松耦合方式在一系列对象之间沟通状态,我们可以独立复用主题(Subject)/可观测者(Observable)和观测者(Observer),即只要遵守接口规则改变其中一方并不会影响到另一方.这也是其主要的设计原则. 举个例子:老师留高软作业,所有学生收到作业信息.老师对应多个学生,留作业是发生的变化,学生会收到作业信息.老师(或学生)通常步行去学校,今天

获取项目中文件,存放到Debug中。

说起这个,还真是费了一般功夫. 说个最简单的方法: 第一步:把需要生成到Debug中的文件放到项目中(注意:当前文件夹目录是什么样的,存放到Debug中也是什么样) 第二部:设置文件属性中 复制到输出目录(如果较新则复制:就是在内容更改后就更新,不复制:不会复制,始终复制:如果该文件需要修改,不建议选择此项) 生成操作(无,编译,内容,嵌入的资源) 第三步:已经完成了,是不是很简单. 还有个手动的方法(哈哈,有点麻烦哦!!!): /// <summary> /// 项目中资源文件保存到Debu

获取项目中Properties文件

在web项目中读取Properties文件配置: properties文件内容: name=tom password=12345 1.使用 类名.class.getResourceAsStream() private void readPropertiesByClass() { // 根目录是class文件所在目录,如果以 /开头从classpath目录中找db.properties;如果不以/开头从当前类所在的包中找 InputStream inputStream = ReadProperti

【PHP5.3+】获取getCurrentUrl()中 的地址url

1.在控制器中调用其他 扩展或者类 的方法时候,getCurrentUrl()方法 是获取的[当前控制器下方法]的路由,不是[其他 扩展或者类 方法]的路由!!! 2.getCurrentUrl()方法代码: /** * get the current url * @return string */ public static function getCurrentUrl() { $pageURL = 'http'; if (@$_SERVER["HTTPS"] == "on

安装使用Entity Framework Power Tool Bate4 (Code First)从已建好的数据自动生成项目中的对应Model(新手贴,望各位大侠给予指点)

从开始学习使用MVC以后,同时也开始接触EF,很多原理都不是太懂,只知道安装了EF以后,点击哪里可以生成数据库对应的Model,不用再自己手写Model.这里记录的就是如何从已建立好的数据库生成项目代码中的Model.一是记录这种操作方式,二是方便那些和我一样的菜鸟同学快速生成Model.(其中的问题希望园里的大侠们给予指点!) 第一步:安装Entity Framework Power Tools Beta 4,打开VS2013——工具——扩展与更新 第二步:选择左边菜单的联机——在右上的搜索栏

如何获取项目中文件的路径

一 文件放在classpath下面 1. 直接获取InputStream InputStream inputStream = Thread.currentThread() .getContextClassLoader().getResourceAsStream("user_table.xml"); 2. 获取resource和path URL resource = Thread.currentThread().getContextClassLoader() .getResource(&

C#如何获取项目中的其他文件夹的路径

//一般用string p=AppDomain.CurrentDomain.BaseDirectory+"\\其他"; //其它的还有 string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名. string str2=Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径. //备注 按照定义,如果该进程在本地或网络驱动