3 回答
TA贡献1808条经验 获得超4个赞
您可以将 post_create_form 与 post_list_view 放在同一页面上,无需为帖子创建创建单独的视图,但您需要创建用于编辑和删除的视图。您可以为所有这些视图提供具有不同 URL 的相同 HTML 页面。在 Class_Based_Views 中使用template_name = 'example/example.html'
,。我希望我能理解您的问题,如果不能进一步澄清为什么您不能将两个视图合并为一个。
TA贡献1784条经验 获得超9个赞
def posts(request):
posts = Post.objects.all()
form = PostForm(request.POST or None, request.FILES or None)
if request.method == "POST":
if form.is_valid():
...
context={
'posts' : page_obj,
'create_or_update_post_form' : form,
}
return render(request, 'post/posts.html',context)
您是否在基于类的视图中很难做到这一点?
TA贡献1773条经验 获得超3个赞
您可以使用基于 django 类的视图轻松完成。
创建视图为
from django.views.generic import ListView
from django.views.generic.edit import CreateView
class ModelCreate(CreateView):
model = ModelName
fields = ['field1', 'field2']
template_name = 'same_page.html'
success_url = reverse_lazy('list_view')
class ModelList(CreateView, ListView):
model = ModelName
fields = ['field1', 'field2']
paginate_by = 5
template_name = 'same_page.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['form'] = self.get_form()
return context
# If form post redirect to ModelCreate View
def post(self, request, *args, **kwargs):
return ModelCreate.as_view()(request)
应用程序/urls.py
from django.urls import path
from app import views
path('list', views.ModelList.as_view(), name='list_view'),
path('add', views.ModelCreate.as_view(), name='add_view'),
最后在 templates/same_page.html 中
<div class="row">
<div class="col-sm-5">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<button type="submit" value="submit" class="btn btn-primary btn-sm float-right">Submit</button>
</form>
</div>
<div class="col-sm-5">
{% if object_list %}
{% for object in object_list %}
<p>{{object.field1}}</p>
<p>{{object.field2}}</p>
{% endfor %}
{% endif %}
</div>
</div>
希望这可以帮助。
添加回答
举报