【发布时间】:2014-01-27 05:51:33
【问题描述】:
如何在 Django 中自定义一个通用的 DetailView。例如,在我的 webapp 中显示给定根目录中的所有备份及其大小,我主要使用通用视图来显示内容,但我不知道如何处理自定义。这是Django tutorial - DetailView page。
这是我的详细视图:
class ProjectDetailView(LoginRequiredMixin, DetailView):
model = Project
template_name = "projects_portal/details.html"
这是我的网址:
url(r'^projects_portal/(?P<pk>\d+)/view/$', ProjectDetailView.as_view(), name="projects_details"),
这是模型:
class Project(models.Model):
root_dir = models.CharField(blank=False, null=False, max_length=2000, verbose_name=_(u"project root directory"))
project_name = models.CharField(blank=False, null=False, max_length=200, verbose_name=_(u"project name"))
total_backups_size = models.IntegerField(blank=True, null=True, verbose_name=_(u"total backups size"))
earliest_backup = models.DateTimeField(blank=True, null=True, verbose_name=_(u"earliest backup"))
latest_backup = models.DateTimeField(blank=True, null=True, verbose_name=_(u"latest backup"))
这是我的 .html:
{% extends "projects_portal/base.html" %}
{% block title %}Details{% endblock %}
{% block extracss %}
<style>
div{font-size:24px;}
.col-md-2{width:400px}
</style>
{% endblock extracss %}
{% block content %}
<table class="table table table-hover">
<tr>
<div class="row top-buffer">
<td><div class="col-md-1"><strong>Root directory:</strong></div></td>
<td><div class="col-md-2">{{project.root_dir}}</div></td>
</div>
</tr>
<tr>
<div class="row top-buffer">
<td><div class="col-md-1"><strong>Project name:</strong></div></td>
<td><div class="col-md-2">{{project.project_name}}</div></td>
</div>
</tr>
<tr><td></td><td></td></tr>
</table>
<div class="row">
<div class="col-md-2 col-md-offset-5 text-center">
<td>
<div class="col-md-1 col-md-offset-1 text-center"><a href="{% url 'projects_portal' %}"><button class="btn btn-success btn-lg">OK</button></a></div>
</td>
<td></td>
</div>
</div>
{% endblock %}
问题是我想在通用 detailView 中添加一些内容,以便它必须可视化给定项目中所有子文件夹的列表并显示它们的大小。我准备了两个函数来处理这个问题:
def traverse_dir(path):
path_len = len(path)
dir_dict = {}
for dirName, subdirList, fileList in os.walk(path):
dir_size = get_size(dirName)
dir_dict[dirName[path_len:]] = dir_size
return dir_dict
def get_size(start_path = '.'):
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
第一个遍历根目录,使用第二个获取每个目录的大小。功能经过测试,一切正常。问题是如何在通用 DetailView 中实现它们。
【问题讨论】:
标签: django python-2.7 django-generic-views