Django CBV的形式非常麻烦

2024-03-29 05:47:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Django CBV有意见。我无法在页面上呈现我的表单。(即使我这样做了,我也无法保存表单)。你知道吗

我想:

  1. 显示一个表单(我们称之为tweet表单),并在同一页面上显示所有tweet(使用两个单独的视图)
  2. 保存tweet,并在同一页面上显示更新的tweet列表。你知道吗

下面是我的代码,但似乎不起作用:

表单.py

from django import forms
from .models import Tweet

class TweetForm(forms.Form):
text = forms.CharField(widget=forms.Textarea(attrs={'rows': 1, 'cols': 85}), max_length=155)
country = forms.CharField(widget=forms.HiddenInput())

网址.py

from django.conf.urls import include, url
from django.contrib import admin
from microblog.views import Index, Profile, PostTweet

admin.autodiscover()

urlpatterns = [
url(r'^$', Index.as_view(), name='home'), # Homepage of app
url(r'^user/(\w+)/$', Profile.as_view(), name='profile'), # User profile page
url(r'^user/(\w+)/post/$', PostTweet.as_view(), name='post'),
url(r'^admin/', include(admin.site.urls)),
]

视图.py

class Profile(View):
    def get(self, request, username):
        params = dict()
        user = User.objects.get(username=username)
        tweets = Tweet.objects.filter(user=user)
        params["tweets"] = tweets
        params["user"] = user
        return render(request, 'microblog/profile.html', params)

class PostTweet(View):
    def post(self, request, username):
        form = TweetForm(self.request.POST)
        if form.is_valid():
            user = User.objects.get(username=username)
            tweet = Tweet(text=form.cleaned_data['text'], user=user, country=form.cleaned_data['country'])
            tweet.save()
            words = form.cleaned_data['text'].split(" ")
            for word in words:
                if word[0] == "#":
                    hashtag, created = HashTag.objects.get_or_create(name=word[1:])
                hashtag.tweet.add(tweet)
         return HttpResponseRedirect('/user/'+username)

非常感谢您的帮助!!我一直在为这事犯愁!!你知道吗


Tags: textnamefromimportformurl表单get