使用我自己的模板旁边的django rest framework one来上传文件

时间:2017-07-23 16:44:50

标签: django django-rest-framework

我使用带有Django Rest Framework的表单上传了一些包含一些信息的图像,它可以使用DRF默认模板显示,我想使用我自己的模板,这样我就可以添加更多按钮和链接。 当我看到它时,它是关于创建我的模板" api.html"在我的模板文件夹中的rest_framework文件夹中,但我不知道我可以在我想要创建的模板内容中添加什么。 enter image description here

我的观点:

class ImageViewSet(viewsets.ModelViewSet):
      queryset = Video.objects.all()
      serializer_class = ImageWatermarkSerializer
      filter_backends = (filters.DjangoFilterBackend,filters.OrderingFilter,)
      filter_fields = ('completed',)
      ordering = ('-date_created',)

对于序列化程序:

class ImageWatermarkSerializer(serializers.ModelSerializer):

      image = serializers.FileField(max_length=None,use_url=True)

      class Meta:
          model = Image
          fields = ('id', 'image_name', 'image_desc', 'date_created', 'image', 'completed', 'size')

我的模特:

class Video(models.Model):
      image_name = models.CharField(max_length=50)
      image_desc = models.TextField(max_length=200)
      completed = models.BooleanField(default=False)
      date_created = models.DateTimeField(auto_now=True)
      image = models.FileField(upload_to='imgs', default='/home/None/No-image.mp4')
      size = models.IntegerField(default=10)

      def __str__(self):
          return  "%s" % self.image_name

在我的urls.py中:

router = routers.DefaultRouter()
router.register(r'upl', views.ImageViewSet)
urlpatterns = [
url(r'^upload/', include(router.urls)), ]

1 个答案:

答案 0 :(得分:1)

由于您已经创建了api.html文件,因此需要在api视图中定义template_name。

renderer_classes = [TemplateHTMLRenderer]
template_name = 'api.html'

api.html

{% load rest_framework %}

<form class="form-horizontal" action="{% url 'upload' %}" method="post" novalidate enctype="multipart/form-data">
    {% csrf_token %}

    # this will include your serializer fields
    {% render_form serializer %}

   # Here you can customize your buttons
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-default">Sign in</button>
        </div>
    </div>
</form>

如果您需要更改图像字段样式,DRF会为您提供样式属性

image = serializers.FileField(
    style={'template': 'app/image.html'}
)

docs

了解更多详情