zoukankan      html  css  js  c++  java
  • 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
    人生就是要不断折腾
  • 相关阅读:
    检测mysq组复制的脚本
    centos7安装NFS
    mysql组复制安装
    springboot+VUE(一)
    redis集群配置
    codevs 3139 栈练习3
    codevs 3138 栈练习2
    codevs 2622 数字序列
    codevs 1054 电梯
    codevs 1507 酒厂选址
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11185081.html
Copyright © 2011-2022 走看看