У меня есть два представления, основанные на классах: один просто показывает некоторые вещи, а другой - форму загрузки изображений. Теперь в моем шаблоне я хочу показать как содержимое, так и возможность загружать изображения через один шаблон.
#models.py
class Page(Group):
name = models.IntegerField()
class Photo(models.Model):
file = models.FileField()
В views.py у меня есть два вида, например:
class UploadView(View):
model = Photo
def get(self, request,*args, **kwargs):
photos_list = Photo.objects.all()
return render(self.request, 'page/upload.html', {'photos': photos_list})
def post(self, request, *args, **kwargs):
form = PhotoForm(self.request.POST, self.request.FILES)
if form.is_valid():
photo = form.save()
data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}
else:
data = {'is_valid': False}
return JsonResponse(data)
class PageDetailView(DetailView):
model = Page
template_name = 'page/page_detail.html'
Вы можете видеть, что у меня есть два отдельных шаблона для двух представлений. Кроме того, моя форма загрузки фотографий выглядит следующим образом:
class PhotoForm(forms.ModelForm):
class Meta:
model = Photo
fields = ('file', )
Теперь в шаблоне моего pagedetailview я показываю такие вещи:
{{ page.name }}
<!-- and various things -->
И в своей загрузке. html, я есть кнопка для загрузки. Когда я нажимаю эту кнопку, я перехожу в проводник, чтобы выбрать фотографии, которые я хочу загрузить. Примерно так:
#upload photo's template
<div >
<button type="button" class="btn btn-primary js-upload-photos">
<span class="glyphicon glyphicon-cloud-upload"></span> Upload photos
</button>
<input id="fileupload" type="file" name="file"
data-url="{% url 'upload' %}"
data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>
</div>
По сути, этот шаблон позволяет мне нажать кнопку и загрузить несколько фотографий. Я использую jquery и немного javascript для этого. Хорошо, теперь вернемся к вопросу.
Я хочу загрузить эти фотографии на странице «Детальный просмотр страницы». Так что тут как бы два взгляда. Что я могу сделать, чтобы получить доступ к этим двум представлениям в одном шаблоне?
Любая помощь будет высоко ценится. Большое спасибо.