django admin 添加自定義鏈接方式
背景
最近做項(xiàng)目開發(fā)出現(xiàn)一個(gè)需求,就是前端會(huì)發(fā)來用戶對(duì)某一項(xiàng)內(nèi)容的報(bào)錯(cuò),報(bào)錯(cuò)信息中包含出錯(cuò)內(nèi)容的id,為了方便管理,需要實(shí)現(xiàn)點(diǎn)擊這個(gè)id直接轉(zhuǎn)達(dá)相應(yīng)內(nèi)容的詳情頁面。
效果展示
解決
首先在django admin的列表中查看數(shù)據(jù)id所代表的鏈接
使用瀏覽器的檢查元素功能查看點(diǎn)擊該id所跳轉(zhuǎn)的鏈接
現(xiàn)在我們知道點(diǎn)擊admin頁面跳轉(zhuǎn)鏈接的格式了。
自定義widget
假如我們的內(nèi)容id使用CharField字段存儲(chǔ),那么可以這樣自定義一個(gè)widget
HTML
{% load myfileter %}<a href='http://www.4tl426be.cn/bcjs/{{ widget.value|generate_link }}' rel='external nofollow' >{{ widget.value }}</a>
{%load myfilter%}是引入自定義模板標(biāo)簽的語句,該標(biāo)簽在下面定義。
python
class MyWidget(TextInput): template_name = 'myWidget.html' def render(self, name, value, attrs=None, renderer=None): context = self.get_context(name, value, attrs) template = loader.get_template(self.template_name).render(context) return mark_safe(template)
自定義模板過濾器
在views.py所在的目錄下新建一個(gè)文件夾templatetags,注意必須為這個(gè)名字。在文件夾中新建一個(gè)myfileter.py文件和_init_.py文件。
myfileter.py
# 生成自定義鏈接@register.filterdef generate_link(value): id = str(value) #就是將第二張圖片中的id替換為當(dāng)前的id就行 return '/admin/learningsource/learningsource/' + id + '/change/'
自定義模型表單
假如我們的模型定義如下
class FeedbackModel(models.Model): error_content_id=models.UUIDField('錯(cuò)誤編號(hào)', primary_key=True, default=uuid.uuid4()) ........
在models.py中定義一個(gè)ModelForm
class FeedbackModelForm(ModelForm): error_content_id = forms.CharField(label='錯(cuò)誤編號(hào)',widget=MyWidget) class Meta: model = SourceLinkErrorReport fields = [’error_content_id’,.....]
假如該模型在admin.py的模型管理器為
class FeedbackModelAdmin(admin.ModelAdmin):..........
將上述定義的模型表單添加到模型管理器中
class FeedbackModelAdmin(admin.ModelAdmin):form=FeedbackModelForm..........
總結(jié)
使用這種方法可以不用創(chuàng)建一個(gè)空的模型然后重寫它的changelist_view函數(shù)實(shí)現(xiàn)自定義鏈接,可以給admin界面的文字,圖片等添加鏈接(通過自定義widget就可實(shí)現(xiàn)),并且鏈接樣式可以自己定義,使用更方便。
在安全性上,本文的做法實(shí)際上相當(dāng)于自己手動(dòng)給django admin內(nèi)置視圖函數(shù)發(fā)送請(qǐng)求,和原來django自己自動(dòng)生成的頁面鏈接沒有任何區(qū)別,對(duì)自定義鏈接的響應(yīng)實(shí)際上也要經(jīng)過**django ** admin的認(rèn)證,安全性是沒問題的。
以上這篇django admin 添加自定義鏈接方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. chat.asp聊天程序的編寫方法2. JSP之表單提交get和post的區(qū)別詳解及實(shí)例3. jsp cookie+session實(shí)現(xiàn)簡易自動(dòng)登錄4. PHP循環(huán)與分支知識(shí)點(diǎn)梳理5. 利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息的實(shí)現(xiàn)方法6. JSP+Servlet實(shí)現(xiàn)文件上傳到服務(wù)器功能7. jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫的方法8. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長日期的方法9. JavaWeb Servlet中url-pattern的使用10. jsp EL表達(dá)式詳解
