【问题标题】:How to generate urls in django如何在 django 中生成 url
【发布时间】:2010-09-07 18:46:27
【问题描述】:

在 Django 的模板语言中,您可以使用{% url [viewname] [args] %} 生成带有参数的特定视图的 URL。您如何以编程方式在 Python 代码中执行相同的操作?

我需要创建一个菜单项列表,其中每个项都有名称、URL 和一个活动标志(无论它是否是当前页面)。这是因为在 Python 中执行此操作会比模板语言更简洁。

【问题讨论】:

    标签: python django url django-urls


    【解决方案1】:

    如果您需要在代码中使用类似于{% url %} 模板标签的东西,Django 提供了django.core.urlresolvers.reverse()reverse 函数具有以下签名:

    reverse(viewname, urlconf=None, args=None, kwargs=None)
    

    https://docs.djangoproject.com/en/dev/ref/urlresolvers/

    在此编辑时,导入为 django.urls import reverse

    【讨论】:

      【解决方案2】:

      我在models.py 中使用了两种不同的方法。第一个是permalink装饰器:

      from django.db.models import permalink
      
      def get_absolute_url(self): 
          """Construct the absolute URL for this Item."""
          return ('project.app.views.view_name', [str(self.id)])
      get_absolute_url = permalink(get_absolute_url)
      

      您也可以直接拨打reverse

      from django.core.urlresolvers import reverse
      
      def get_absolute_url(self): 
          """Construct the absolute URL for this Item."""
          return reverse('project.app.views.view_name', None, [str(self.id)])
      

      【讨论】:

      • 这和使用装饰器一样吗? @models.permalink
      【解决方案3】:

      请注意,使用 reverse() 要求您的 urlconf 模块 100% 没有错误并且可以处理 - iow 没有 ViewDoesNotExist 错误左右,或者您会遇到可怕的 NoReverseMatch 异常(模板中的错误通常会默默地失败导致None)。

      【讨论】:

        【解决方案4】:

        对于 Python3 和 Django 2:

        from django.urls import reverse
        
        url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})
        

        【讨论】:

          猜你喜欢
          • 2021-10-03
          • 1970-01-01
          • 2015-05-10
          • 2020-02-21
          • 2019-02-11
          • 2014-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多