第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:同一頁面上的帖子表單和帖子列表

Django:同一頁面上的帖子表單和帖子列表

白衣染霜花 2024-01-16 15:13:03
我創(chuàng)建了一個具有多個用戶的網(wǎng)站,使用圖像發(fā)布帖子并能夠添加/刪除朋友。因此,很容易為帖子列表創(chuàng)建兩個不同的頁面并創(chuàng)建一個新頁面。但當(dāng)然,當(dāng)你可以在同一個地方閱讀帖子并發(fā)布新帖子時,它看起來會更好。據(jù)我了解(學(xué)習(xí) django 不到一個月),我無法將 2 個視圖連接到同一個 url,所以我看到的最合乎邏輯的方法是將 2 個視圖連接到一個視圖中,我還嘗試使用模板繼承來渲染通過包含模板發(fā)布表單,但實(shí)際上它不起作用。下面你可以看到我的觀點(diǎn)、帖子模型和模板。感謝您的關(guān)注。views.py:from braces.views import SelectRelatedMixinfrom . import modelsfrom django.views import genericfrom django.contrib.auth.mixins import LoginRequiredMixinclass PostList(SelectRelatedMixin, generic.ListView):    model = models.Post    select_related = ('user',)class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):    fields = ('post_message', 'post_image')    model = models.Post    select_related = ('user',)    def form_valid(self, form):        self.object = form.save(commit = False)        self.object.user = self.request.user        self.object.save()        return super().form_valid(form)models.py:import misakaclass Post(models.Model):    user = models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'posts')    posted_at = models.DateTimeField(auto_now = True)    post_message = models.TextField()    message_html = models.TextField(editable = False)    post_image = models.ImageField(upload_to = 'postpics', blank = True)    def __str__(self):        return self.post_message    def save(self, *args, **kwargs):        self.message_html = misaka.html(self.post_message)        super().save(*args, **kwargs)    def get_absolute_url(self):        return reverse('posts:all')    class Meta:        ordering = ['-posted_at']        unique_together = ['user', 'post_message']urls.py:app_name = 'posts'urlpatterns = [    path('', views.PostList.as_view(), name = 'all'),    path('new/', views.CreatePost.as_view(), name = 'create'),]post_form.html(模板,允許創(chuàng)建新帖子,將在 post_list.html 中看到):
查看完整描述

3 回答

?
炎炎設(shè)計(jì)

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個贊

您可以將 post_create_form 與 post_list_view 放在同一頁面上,無需為帖子創(chuàng)建創(chuàng)建單獨(dú)的視圖,但您需要創(chuàng)建用于編輯和刪除的視圖。您可以為所有這些視圖提供具有不同 URL 的相同 HTML 頁面。在 Class_Based_Views 中使用template_name = 'example/example.html',。我希望我能理解您的問題,如果不能進(jìn)一步澄清為什么您不能將兩個視圖合并為一個。



查看完整回答
反對 回復(fù) 2024-01-16
?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超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)

您是否在基于類的視圖中很難做到這一點(diǎn)?


查看完整回答
反對 回復(fù) 2024-01-16
?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個贊

您可以使用基于 django 類的視圖輕松完成。


創(chuàng)建視圖為

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)

應(yīng)用程序/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>

希望這可以幫助。


查看完整回答
反對 回復(fù) 2024-01-16
  • 3 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號