2011-02-25 65 views
2

所以我是ModelForms和{{form.as_table}}模板标签的狂热用户。这让我有一个通用表单模板,可以在不知道具体字段的情况下重用。现在我想打印出完全一样的模型,就像我为表单所做的一样,但没有表单域。我从来没有遇到过这样做的好方法。任何人都知道吗?Django显示一个通用模型(类似于表单)

下面是一个例子,更具体:

model: 
class ExampleModel(models.Model): 
    info1 = models.TextField() 
    info2 = models.TextField() 

form: 
class ExampleForm(forms.ModelForm): 
    class Meta: 
     model = ExampleModel 

view: 
def example_form_view(request): 
    form = ExampleForm() 
    return render_to_response('form.html', locals(), context_instance=RequestContext(request)) 

def example_display_view(request): 
    model = ExampleModel.objects.get(id=1) 
    return render_to_response('model.html', locals(), context_instance=RequestContext(request)) 

要打印出来的表格,我有了一个模板:

<form action="." method="post"> 
    {% csrf_token %} 
    <table> 
     {{ form.as_table }} 
     <tr> 
      <td></td> 
      <td><input type='submit' value="submit" /></td> 
     </tr> 
    </table> 
</form> 

而且我也很希望能够有一个通用模板,其中包括这样的:

<table> 
    {{ model.as_table }} 
</table> 

,并得到的布局形式同一个,但没有形式。任何人都知道有什么办法做到这一点?

我很抱歉,如果这之前已经问过,但我做了搜索,没有找到任何东西。虽然我不知道要搜索什么。

回答

1

(如果你想重新使用它在多个模型或超类),你可以定义你的模型的as_table方法如:

def as_table(self): 
    output = '<table>' 
    # for each field in model 
    for field in self._meta.fields: 
     # optionally skip any unwanted fields such as primary keys, etc 
     # if field.auto_created: 
     # continue 
     output += '<tr><th>%s</th><td>%s</td></tr>' % (
      field.name, getattr(self, field.name)) 
    output += '</table>' 
    return output 
0

我实现这样的只读可插拔的应用“形式” :

DisplayText场插件:

https://github.com/Dmitri-Sintsov/django-jinja-knockout/blob/master/django_jinja_knockout/widgets.py

DisplayModelMetaclass使表单字段使用显示终端ayText插件默认:

https://github.com/Dmitri-Sintsov/django-jinja-knockout/blob/master/django_jinja_knockout/views.py

这里是文档:

https://django-jinja-knockout.readthedocs.org/en/latest/forms.html#displaying-read-only-forms

它使用的Jinja2宏呈现在引导3代表这样的形式,但小部件和元类本身可以使用与Django模板语言一样。

相关问题