Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中类似express.js的URL_Django_Url_Configuration_Express - Fatal编程技术网

Django中类似express.js的URL

Django中类似express.js的URL,django,url,configuration,express,Django,Url,Configuration,Express,我们可以在django中使用类似于express.js的url配置吗?有时候使用regex是一件非常痛苦的事情 express.js网址: app.get('/users/:id/feed',function(){}) django URL: url(r'^users/(?P<id>.*)/feed$', 'users.views.feed') 在核心Django中,只能使用正则表达式指定URL 我不熟悉express.js,但是通过使用regex,您可以做一些很酷的事情,例如:

我们可以在django中使用类似于express.js的url配置吗?有时候使用regex是一件非常痛苦的事情

express.js网址:

app.get('/users/:id/feed',function(){})
django URL:

url(r'^users/(?P<id>.*)/feed$', 'users.views.feed')

在核心Django中,只能使用正则表达式指定URL

我不熟悉express.js,但是通过使用regex,您可以做一些很酷的事情,例如:

  • 位置参数和命名参数

    # named
    url(r'^(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    # corresponds to
    # something does not have to be supplied
    def view(request, something=None, foo=None, foo2=None)
        ...
    
  • 计算反向URL

    # with
    url(r'^some/path/(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    >>> reverse('view', kwargs={'foo':'hello', 'foo2':'world'})
    u'some/path/hello/world/'
    
    #带有
    url(r'^some/path/(?P.*)/(?P.*)/$,'view',name='view')
    >>>反向('view',kwargs={'foo':'hello','foo2':'world})
    u'some/path/hello/world/'
    
  • 限制URL

    url(r'^some/path/(?P<id>\d+)/$', 'view', name='view')
    # will only allow urls like
    # some/path/5/
    # some/path/10/
    
    # and will reject
    # some/path/hello/
    # some/path/world/
    
    url(r'^some/path/(?P\d+/$),'view',name='view')
    #只允许像这样的URL
    #部分/路径/5/
    #部分/路径/10/
    #并将拒绝
    #some/path/hello/
    #一些/路径/世界/
    

在核心Django中,只能使用正则表达式指定URL

我不熟悉express.js,但是通过使用regex,您可以做一些很酷的事情,例如:

  • 位置参数和命名参数

    # named
    url(r'^(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    # corresponds to
    # something does not have to be supplied
    def view(request, something=None, foo=None, foo2=None)
        ...
    
  • 计算反向URL

    # with
    url(r'^some/path/(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    >>> reverse('view', kwargs={'foo':'hello', 'foo2':'world'})
    u'some/path/hello/world/'
    
    #带有
    url(r'^some/path/(?P.*)/(?P.*)/$,'view',name='view')
    >>>反向('view',kwargs={'foo':'hello','foo2':'world})
    u'some/path/hello/world/'
    
  • 限制URL

    url(r'^some/path/(?P<id>\d+)/$', 'view', name='view')
    # will only allow urls like
    # some/path/5/
    # some/path/10/
    
    # and will reject
    # some/path/hello/
    # some/path/world/
    
    url(r'^some/path/(?P\d+/$),'view',name='view')
    #只允许像这样的URL
    #部分/路径/5/
    #部分/路径/10/
    #并将拒绝
    #some/path/hello/
    #一些/路径/世界/
    

    • 为了在Django中使用更简单的url结构,您需要编写一个实用函数,将url格式转换为正则表达式格式

      下面是一个基于您的示例的简单函数:

      def easy_url(url_str):
          patt = re.compile(r':\w+/?')
          matches = patt.findall(url_str)
          for match in matches:
              var = match[1:-1]
              # generate re equivalent 
              var_re = r'(?P<%s>\w+)/'%var
              url_str = url_str.replace(match, var_re) 
          url_str += '$'
          return url_str
      
      # in your url file
      url(easy_url('/users/:id/feed/'), 'users.views.feed')
      
      def easy\u url(url\u str):
      patt=re.compile(r':\w+/?')
      matches=patt.findall(url\u str)
      对于匹配中的匹配:
      var=匹配[1:-1]
      #生成重当量
      var_re=r'(?P\w+)/'%var
      url\u str=url\u str.replace(匹配,变量)
      url_str+='$'
      返回url\u str
      #在您的url文件中
      url(简单url('/users/:id/feed/'),'users.views.feed')
      
      您可以更新此函数以指定url变量的类型,例如仅限数字等


      然而,正则表达式非常强大,你可以用它们做很多事情。因此,您应该仅对具有简单规则的URL使用此类包装器,以保持其轻量级

      为了在Django中使用更简单的url结构,您需要编写一个实用函数,将url格式转换为正则表达式格式

      下面是一个基于您的示例的简单函数:

      def easy_url(url_str):
          patt = re.compile(r':\w+/?')
          matches = patt.findall(url_str)
          for match in matches:
              var = match[1:-1]
              # generate re equivalent 
              var_re = r'(?P<%s>\w+)/'%var
              url_str = url_str.replace(match, var_re) 
          url_str += '$'
          return url_str
      
      # in your url file
      url(easy_url('/users/:id/feed/'), 'users.views.feed')
      
      def easy\u url(url\u str):
      patt=re.compile(r':\w+/?')
      matches=patt.findall(url\u str)
      对于匹配中的匹配:
      var=匹配[1:-1]
      #生成重当量
      var_re=r'(?P\w+)/'%var
      url\u str=url\u str.replace(匹配,变量)
      url_str+='$'
      返回url\u str
      #在您的url文件中
      url(简单url('/users/:id/feed/'),'users.views.feed')
      
      您可以更新此函数以指定url变量的类型,例如仅限数字等


      然而,正则表达式非常强大,你可以用它们做很多事情。因此,您应该仅对具有简单规则的URL使用此类包装器,以保持其轻量级

      是的,你是对的,使用正则表达式太高级了,但是我想要更简单的解决方案,感谢Patternsys,你是对的,使用正则表达式太高级了,但是我想要更简单的解决方案,感谢patternsNo问题。我认为你可以简化很多常见的url,使用一个简单的url结构,就像你提到的那样。此外,如果您有多个参数,例如/users/:id/feed/:cat/没有问题,则这应该可以工作。我认为你可以简化很多常见的url,使用一个简单的url结构,就像你提到的那样。此外,如果您有多个参数,例如/users/:id/feed/:cat,则这应该可以工作/