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>
希望這可以幫助。
添加回答
舉報