我想返回一个HTML页面,其中包含用户在Django restframework中发布的值
我创建的模型是
class DetailView(viewsets.ModelViewSet):
queryset= Detail.objects.all()
serializer_class = DetailSerializer
@action(methods=['GET'],detail=False)
def get(self,request):
first_name= request.POST.get("first_name")
last_name = request.POST.get("last_name")
return redirect ('index.html/')
url: 路由器= routers.DefaultRouter() router.register('detail',views.DetailView)
index.html:
{{first_name}}
{{last_name}}
我想自动返回一个HTML页面,其中包含他们发布的值
答案 0 :(得分:0)
我认为必须在post方法中定义而不是get方法。我假设您要发布表单提供的数据。在我看来,这是一种适用的方法:
views.py
class DetailView(viewsets.ModelViewSet):
form_class = PersonalDataForm # defined in forms.py
view_template = 'index.html'
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
personal_data = {}
first_name = form.cleaned_data['first_name']
personal_data['first_name'] = first_name
last_name = form.cleaned_data['last_name']
personal_data['last_name'] = last_name
return render(request, self.view_template, {'form': form, 'personal_data': personal_data}
index.html
<form action="" method="POST">
{% csrf_token %}
{{ form.first_name }}
{{ form.last_name }}
<button type="submit" id="submit-button">save</button>
</form>
{{ personal_data.first_name }}
{{ personal_data.last_name }}
如果用户发送GET请求,则可能要隐藏表单。您可以通过将wohle格式包装到if子句(例如{%if valid_data_submitted%} ... ... {%endif%}
)中来实现。forms.py
class PersonalDataForm(forms.ModelForm):
first_name = forms.CharField()
last_name = forms.CharField()
def save(self, commit=True):
self.instance.first_name = first_name
self.instance.last_name = last_name
return super(PersonalDataForm, self).save(commit)
class Meta:
model: models.Detail
那可能是第一种方法。为了进一步说明,我需要知道用户将如何发布数据。
答案 1 :(得分:0)
我认为您应该只更改视图中的renderer_classes
属性,将其设置为TemplateHTMLRenderer
。