" ...如果您需要在代码中使用类似于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">对象的文字名称
一个href =" self.get_absolute_url(** kwargs)">对象的文字名称?
或
a href =" object.get_absolute_url(self,** kwargs)">文本名称 对象?
如果是这样,我是否需要在模型的gau定义中添加任何内容以确保传递给那些kwargs?
或者我只是将它视为常规的外部链接,因此必须对其进行硬编码?
感谢。 --update -
@ChidG:感谢您提供了这样一个完整的答案,我很抱歉花了这么长时间才回复您。我想稍微澄清一下我的用例,看看是否会改变你的答案。如果我有十篇文章使用相同的模板,每篇文章仍然是唯一的,并且他们到不同网址的链接不会在每篇文章的相同位置。因此,我无法在模板中放置一个(或多个)url标记,这对所有十篇文章都有用。这就是我使用gau / url标签外面模板的含义。我想做一个简单的搜索和替换,将受影响的文本转换为链接。否则,我必须手动一次一个,我认为不能成为必须这样做的方式。我错过了什么?
答案 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
- 我是否必须将对象的全名放在href?
中 醇>
你必须放置任何引用模板上下文中对象的上下文变量。
- 我如何使用像self或object或modelname这样的变量?
醇>
您可以使用您喜欢的任何名称作为上下文变量。如果您正在使用基于Django的基于类的视图,则默认情况下单个对象视图将为{% url 'whatever_url_name' kwarg=value %}
,但您可以使用object
属性将其更改为您喜欢的任何内容。图。
- 我可以重写gau以获取kwargs以及self吗?
醇>
这是不必要的。 context_object_name
返回完整的URL,它只需要模型实例。模型实例必须能够使用自己的get_absolute_url
方法找到自己的URL,而不需要任何进一步的kwargs。
- 我可以使用:
醇>
您正在链接的get_absolute_url
的Django文档中清楚地演示了正确的语法:
get_absolute_url