Я разрабатываю страницу, в которой люди могут просматривать и создавать объекты определенного вида (объекты являются экземплярами модели Project).ListView и CreateView в одном шаблоне Django
Как я понимаю, я не могу сделать это в одном представлении без ужасно грязного кода, поэтому я пытаюсь понять, как я могу использовать один шаблон для отображения двух представлений (ProjectCreateView и ProjectListView).
Прямо сейчас, это то, что я работаю с:
views.py:
class ProjectCreateView(CreateView):
model = Project
template_name = "fileupload/project_list.html"
fields = ["name"]
def get_context_data(self, **kwargs):
context = super(ProjectCreateView, self).get_context_data(**kwargs)
return context
class ProjectListView(ListView):
model = Project
def get_context_data(self, **kwargs):
context = super(ProjectListView, self).get_context_data(**kwargs)
return context
class ProjectView(View):
model = Project
def get(self, request, *args, **kwargs):
view = ProjectListView.as_view()
return view(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
view = ProjectCreateView.as_view()
return view(request, *args, **kwargs)
urls.py
urlpatterns = patterns('',
url(r'^projects/$', ProjectView.as_view(), name="projects"),
)
models.py
class Project(models.Model):
name = models.CharField(max_length=200)
def get_absolute_url(self):
return reverse("projects")
код для формы
<form id="fileupload" method="post" action="." enctype="multipart/form-data">
<div class="row fileupload-buttonbar">
<div class="span7">
<span class="btn btn-primary fileinput-button">
<i class="icon-plus icon-white"></i>
<span>New Project</span>
<input type="submit" name="Create">
</span>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete Project</span>
</button>
<input type="checkbox" class="toggle">
</div>
{{ form.as_p }}
</div>
<table class="table table-striped"><tbody class="files"></tbody></table>
</form>
Однако с этой конфигурацией формы показывает только поле «имя» после того, как кнопка была нажата, и после ввода в имени я получаю это:
NoReverseMatch at /upload/projects/
Reverse for 'projects' with arguments '()' and keyword arguments '{}' not found.
Из-за этого я предполагаю, что есть намного более простой способ реализовать это, чем то, что я делаю. Буду признателен за любую помощь.
Вы можете реализовать показ списка объектов, формы модели и обработки сообщения для создания новых объектов в одном представлении без его уродливости, вонючего или иного. Взгляды на основе классов велики, пока они не станут. – Brandon
Как я могу это сделать? Я честно просто ищу чистое решение, которое позволит мне сделать две вещи на одном шаблоне. – Plasma
Опубликовать пример для вас. – Brandon