get_absolute_url并在模板

时间:2017-03-30 23:11:48

标签: html django

" ...如果您需要在代码中使用类似于url模板标记的内容, Django提供以下功能:reverse()...."

我查看了get_absolute_url()reverse的文档,以及给出的示例:

  

a href =" {{object.get_absolute_url}}"> {{object.name}} / a>

我没有看到或理解的是,我们如何将kwargs(名称,自我,ID,等等)传递给模型方法,以便它知道返回网址的100个实例中的哪一个,特别是在我需要的地方在文本外部模板系统中使用它?

  

a href =" name_of_object.get_absolute_url">对象的文字名称

  1. 我是否必须在href中输入对象的全名?
  2. 我如何使用像self或object或modelname这样的变量?
  3. 我可以重写gau以获取kwargs以及self吗?
  4. 如果我这样做,我可以把()放在gau的末尾来接受kwargs吗?我们不能在模板中这样做。
  5. 我可以使用:
  6.   

    一个href =" self.get_absolute_url(** kwargs)">对象的文字名称?   


      

    a href =" object.get_absolute_url(self,** kwargs)">文本名称   对象?

    1. 如果是这样,我是否需要在模型的gau定义中添加任何内容以确保传递给那些kwargs?

    2. 或者我只是将它视为常规的外部链接,因此必须对其进行硬编码?

    3. 感谢。 --update -

      @ChidG:感谢您提供了这样一个完整的答案,我很抱歉花了这么长时间才回复您。我想稍微澄清一下我的用例,看看是否会改变你的答案。如果我有十篇文章使用相同的模板,每篇文章仍然是唯一的,并且他们到不同网址的链接不会在每篇文章的相同位置。因此,我无法在模板中放置一个(或多个)url标记,这对所有十篇文章都有用。这就是我使用gau / url标签外面模板的含义。我想做一个简单的搜索和替换,将受影响的文本转换为链接。否则,我必须手动一次一个,我认为不能成为必须这样做的方式。我错过了什么?

1 个答案:

答案 0 :(得分:1)

当Django的文档在模板系统之外说“#”时,它们意味着在Python代码中,在views.py或models.py(或whatever.py)文件中。您给出的所有示例都显示为HTML(它们具有a标记,因此看起来您正在谈论HTML)。

如果是HTML,那么它不在模板系统之外,因此您提到的Python功能无法正常工作。您需要使用Django模板标记。

关于这个问题:

  

我没有看到或理解的是,我们如何将kwargs(名称,自我,ID,等等)传递给模型方法,以便它知道返回网址的100个实例中的哪一个,特别是在我需要的地方在模板系统之外的文本中使用它?

{{object.get_absolute_url}}(或纯Python中的object.get_absolute_url())不需要kwarg,因为模型上的get_absolute_url方法已经知道如何生成正确的需要任何kwargs的URL。如果它还不知道如何执行此操作(由于您的特定URL配置),您可以编写一个自定义get_absolute_url方法来启用它。

每当您从Django视图返回HTML文件时(除非您正在做一些非常规的事情),您正在使用模板系统。当您使用模板系统时,使用{{ }}引用Django上下文变量,使用{% %}引用自定义标记。因此,要将网址插入模板,无论是在a标记中还是在文本中,您都会使用大括号,它将是{{ object.get_absolute_url }}或使用{{1}标记本身,url

  
      
  1. 我是否必须将对象的全名放在href?
  2. 中   

你必须放置任何引用模板上下文中对象的上下文变量。

  
      
  1. 我如何使用像self或object或modelname这样的变量?
  2.   

您可以使用您喜欢的任何名称作为上下文变量。如果您正在使用基于Django的基于类的视图,则默认情况下单个对象视图将为{% url 'whatever_url_name' kwarg=value %},但您可以使用object属性将其更改为您喜欢的任何内容。图。

  
      
  1. 我可以重写gau以获取kwargs以及self吗?
  2.   

这是不必要的。 context_object_name返回完整的URL,它只需要模型实例。模型实例必须能够使用自己的get_absolute_url方法找到自己的URL,而不需要任何进一步的kwargs。

  
      
  1. 我可以使用:
  2.   

您正在链接的get_absolute_url的Django文档中清楚地演示了正确的语法:

get_absolute_url