Как именно я могу настроить общий DetailView в Django. Например, в моем веб-приложении, которое показывает все резервные копии в заданном корневом каталоге вместе с их размером, я в основном использую общие представления для отображения содержимого, но я не имею ни малейшего представления, как справиться с настройкой. Это учебник по Django - страница DetailView.
Это мой DetailView:
class ProjectDetailView(LoginRequiredMixin, DetailView):
model = Project
template_name = "projects_portal/details.html"
Это мой URL:
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.