本文介绍 django.db.models.Model.get_absolute_url
的用法。
声明
Model.get_absolute_url()
定义 get_absolute_url()
方法来告诉 Django 如何计算对象的规范 URL。对于调用者,该方法应该返回一个字符串,该字符串可用于通过 HTTP 引用该对象。
例如:
def get_absolute_url(self):
return "/people/%i/" % self.id
尽管此代码正确且简单,但它可能不是编写此类方法的最可移植的方式。
函数通常是最好的方法。reverse()
例如:
def get_absolute_url(self):
from django.urls import reverse
return reverse('people-detail', kwargs={'pk' : self.pk})
Django 使用get_absolute_url()
的地方之一是在管理应用程序中。如果对象定义了此方法,object-editing 页面将有一个 “View on site” 链接,该链接将直接跳转到对象的公共视图,如 get_absolute_url()
所示。
类似地,Django 的一些其他位,例如联合提要框架,在定义时使用get_absolute_url()
。如果你的模型实例每个都有一个唯一的 URL 是有意义的,你应该定义 get_absolute_url()
。
警告
您应该避免从未经验证的用户输入构建 URL,以减少链接或重定向中毒的可能性:
def get_absolute_url(self):
return '/%s/' % self.name
如果 self.name
是 '/example.com'
这将返回 '//example.com/'
,它又是一个有效的架构相对 URL,但不是预期的 '/%2Fexample.com/'
。
最好在模板中使用get_absolute_url()
,而不是hard-coding 对象的 URL。例如,这个模板代码很糟糕:
<!-- BAD template code. Avoid! -->
<a href="/people/{{ object.id }}/">{{ object.name }}</a>
这个模板代码要好得多:
<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
这里的逻辑是,如果您更改对象的 URL 结构,即使是为了更正拼写错误之类的小事,您也不希望必须跟踪可能创建 URL 的每个位置。在get_absolute_url()
中指定一次,然后让所有其他代码调用该位置。
注意
您返回的字符串get_absolute_url()
必须仅包含 ASCII 字符(URI 规范要求,RFC 2396#section-2) 并在必要时进行 URL 编码。
调用get_absolute_url()
的代码和模板应该能够直接使用结果而无需任何进一步处理。如果您使用的字符串包含 ASCII 范围之外的字符,您可能希望使用 django.utils.encoding.iri_to_uri()
函数来帮助解决此问题。
相关用法
- Python Django Model.from_db用法及代码示例
- Python Django Model.__eq__用法及代码示例
- Python Django Model.__str__用法及代码示例
- Python Django Model.objects用法及代码示例
- Python Django ModelAdmin.get_changeform_initial_data用法及代码示例
- Python Django ModelAdmin.get_formset_kwargs用法及代码示例
- Python Django ModelAdmin.get_urls用法及代码示例
- Python Django ModelAdmin.formfield_for_choice_field用法及代码示例
- Python Django ModelAdmin.readonly_fields用法及代码示例
- Python Django ModelAdmin.prepopulated_fields用法及代码示例
- Python Django ModelAdmin.empty_value_display用法及代码示例
- Python Django ModelAdmin.get_form用法及代码示例
- Python Django ModelChoiceField.iterator用法及代码示例
- Python Django ModelAdmin.formfield_for_foreignkey用法及代码示例
- Python Django ModelAdmin.get_search_results用法及代码示例
- Python Django ModelAdmin.autocomplete_fields用法及代码示例
- Python Django ModelAdmin.date_hierarchy用法及代码示例
- Python Django ModelAdmin.get_formsets_with_inlines用法及代码示例
- Python Django ModelAdmin.save_model用法及代码示例
- Python Django ModelAdmin.view_on_site用法及代码示例
- Python Django ModelChoiceField.empty_label用法及代码示例
- Python Django ModelAdmin.get_inline_instances用法及代码示例
- Python Django ModelAdmin.formfield_overrides用法及代码示例
- Python Django ModelAdmin.get_changelist_formset用法及代码示例
- Python Django ModelAdmin.get_sortable_by用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.Model.get_absolute_url。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。