本文介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。