allow_tags=True 不在 django admin 中渲染 <form> 标签
Posted
技术标签:
【中文标题】allow_tags=True 不在 django admin 中渲染 <form> 标签【英文标题】:allow_tags=True does not render <form> tag in django admin 【发布时间】:2013-04-30 22:18:09 【问题描述】:我想在 django admin 的 list_display 中显示一个表单,但我遇到了这个问题:
当我定义这样的东西时:
class MyModelAdmin(admin.ModelAdmin):
list_display = ('foo', 'pagar_pase')
def pagar_pase(self, obj):
return """<form action="." method="post">Action</form> """
pagar_pase.description = 'Testing form output'
pagar_pase.allow_tags = True
结果是没有标签的Action,有什么办法解决这个问题吗?
谢谢
【问题讨论】:
我怀疑问题出在你的想象中。<form>
标签没有任何显示输出:它们唯一的结果是将内容视为可提交的表单。也许您的意思是有一个<input type="submit">
标签,尽管如果没有实际提交的内容,这将无济于事。
【参考方案1】:
这是文档中出现的内容。一些提示:
我认为你应该在你的list_display
元组中包含pagar_pase
,而且你最好使用format_html
而不是三引号。
from django.utils.html import format_html
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)
def colored_name(self):
return format_html('<span style="color: #0;">1 2</span>',
self.color_code,
self.first_name,
self.last_name)
colored_name.allow_tags = True
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name')
在这里,他们首先定义模型,然后创建一个ModelAdmin
,然后在您缺少的list_display
中包含方法的名称。
你的代码应该是这样的:
class MyModelAdmin(admin.ModelAdmin):
list_display = ('foo', 'my_custom_display', 'pagar_pase')
def pagar_pase(self, obj):
# I like more format_html here.
return """<form action="." method="post">Action</form> """
pagar_pase.description = 'Testing form output'
pagar_pase.allow_tags = True
希望对你有帮助!
【讨论】:
也不工作,我已经编辑了我的问题,包括 list_display 上的 pagar_pase 并且不能像这样工作...... 真正的问题是django不会在列表显示上渲染表单标签,即使我使用allow_tags=True或format_html,它会渲染很多标签而不是表单标签 这是有道理的,因为它已经在表单中。我猜你应该尝试另一种方法:( 是的,我看到了,但我期待这里有一个不错的解决方案,我不知道如何面对这个问题,qucik 解决方案是使用 jquery 提交数据,但它是一个 paypal表格,我会检查:(...谢谢!!!!【参考方案2】:您似乎正试图对列出的项目触发操作。也许通过编写自己的admin actions 来执行此操作会更好。
这是一个例子:
def pagar_pase(modeladmin, request, queryset):
""" Does something with each objects selected """
selected_objects = queryset.all()
for i in selected_objects:
# do something with i
pagar_pase.short_description = 'Testing form output'
class MyModelAdmin(admin.ModelAdmin):
list_display = ('foo', 'my_custom_display')
actions = [pagar_pase]
【讨论】:
自定义管理操作对我不起作用,因为我正在尝试在 list_display 上呈现贝宝表单【参考方案3】:好的,所以这里的问题是 list_display 在一个 html 表单内,所以我试图在一个表单内显示一个表单,这是一个坏主意......下面解释了原因
Can you nest html forms?
希望对你有帮助。
【讨论】:
以上是关于allow_tags=True 不在 django admin 中渲染 <form> 标签的主要内容,如果未能解决你的问题,请参考以下文章