Python 如何在Django admin中向字段添加可单击链接?
我有这个管理员Python 如何在Django admin中向字段添加可单击链接?,python,django,Python,Django,我有这个管理员 class LawyerAdmin(admin.ModelAdmin): fieldsets = [ ('Name', {'fields': ['last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated']}), ] list_display = ('last', 'first', 'school', 'year_graduated', 'firm_name',
class LawyerAdmin(admin.ModelAdmin):
fieldsets = [
('Name', {'fields': ['last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated']}),
]
list_display = ('last', 'first', 'school', 'year_graduated', 'firm_name', 'firm_url')
list_filter = ['school', 'year_graduated']
search_fields = ['last', 'school', 'firm_name']
我想让“firm_url”字段与字段中列出的每个url一起单击。我该怎么做?谢谢。在LawyerAdmin类中定义一个自定义方法,以HTML形式返回链接:
def show_firm_url(self, obj):
return '<a href="%s">%s</a>' % (obj.firm_url, obj.firm_url)
show_firm_url.allow_tags = True
def显示公司url(self,obj):
返回“”%(obj.firm\u url,obj.firm\u url)
显示\u firm\u url.allow\u tags=True
请参阅。将
显示公司url
添加到列表显示中
但它会覆盖my models中指定的文本显示,并在列的标题上显示“show firm url”
您可以通过指定“简短描述”属性进行更改:
show_firm_url.short_description = "Firm URL"
使用
format\u html
实用程序。这将从参数中转义任何html,并将字符串标记为可在模板中安全使用。Django 1.9中已弃用了allow_tags
method属性
from django.utils.html import format_html
class LawyerAdmin(admin.ModelAdmin):
list_display = ['show_firm_url', ...]
...
def show_firm_url(self, obj):
return format_html("<a href='{url}'>{url}</a>", url=obj.firm_url)
show_firm_url.short_description = "Firm URL"
来自django.utils.html导入格式\u html
类LawyerAdmin(admin.ModelAdmin):
列表显示=['show\u firm\u url',…]
...
def显示公司url(自身、obj):
返回格式\u html(“,url=obj.firm\u url)
显示公司url.short\u description=“公司url”
现在,即使在以下情况下,您的管理员用户也是安全的:
firm_url == 'http://a.aa/<script>eval(...);</script>'
firm_url=='http://a.aa/eval(...);'
有关更多信息,请参阅。如果愿意,您可以在模型中处理它: 在models.py中:
class Foo(models.Model):
...
def full_url(self):
url = 'http://google.com'
from django.utils.html import format_html
return format_html("<a href='%s'>%s</a>" % (url, url))
是的,我做了,现在它工作了,谢谢。但它会覆盖my models中指定的文本显示,并在列的标题上显示“show firm url”。我不知道是否有办法解决这个问题,但我将“show\u firm\u url”改为“Bio\u link”,现在一切都好了。改用。它更安全。这容易受到HTML注入的攻击。例如,
obj.firm\u url
可以是http://example.com/alert(“我是邪恶的”)
这是不推荐的,因为django 1.11使用了标记安全
而不是允许标记
这很有帮助,我可以在模型页面中看到一个单独的列。但是如何在模板中使用这个呢?我试过{{obj.show\u firm\u url}}
,但它不起作用。我应该如何将其整合到模板中?这里是一篇关于最新解决方案的帖子:IMHO应该是正确的答案。从这里我可以看到管理员网站外的OP通缉链接。但那不是我的情况,所以我最终使用了列表显示链接。不,@ViniciusSilva不是我的答案。OP想要一个链接到公司url
的值,显然,因为它是一个url。似乎是两件不同的事情,我是通过谷歌来到这里的,而对我来说,另一个答案是使用列表显示链接来实现的。这应该是选择的答案,因为它可以防止eval脚本攻击
list_display = ('full_url', ... )