Вам необходимо изменить имя метода записи в поле зрения, оно должно быть post
, а не Post
.Также необходимо обновить сигнатуру метода следующим образом:
class PostTweet(View):
def post(self, request, *args, **kwargs): # renamed it post instead of Post
if request.method =='POST':
print(post)
return HttpResponse('posted')
Также обновите форму следующим образом:
<form method="post">{% csrf_token %}
<!-- <div class="col-md-8 col-md-offset-2 fieldWrapper"> -->
{{ form.text.errors }}
{{ form.text }}
<!-- </div> -->
{{ form.country.as_hidden }}
<button type="submit" value="post it">Post
</form>
Обновить
Вам необходимо предоставить метод get дляпредставление для получения http get функциональности (я использую render () для отображения html):
class PostTweet(View):
def post(self, request, *args, **kwargs): # renamed it post instead of Post
if request.method =='POST':
print(post)
return HttpResponse('posted')
def get(self, request, *args, **kwargs):
form = YourForm()
return render(request, 'your_html.html', {'form': form})
Вам необходимо определить форму также (если вы этого не сделали) для визуализации формы в html.
Наконец, я не знаю, почему вы берете на себя такие хлопоты, чтобы визуализировать форму, где вы можете просто использовать FormView , который сделает все за вас.Например:
class YourForm(forms.Form):
country = forms.CharField()
class PostTweet(FormView):
form_class = YourForm
template_name = "path/to/template.html"
def form_valid(self, form):
print(form.cleaned_data) # it will show all the data submitted from the form
return super(YourFormView, self).form_valid(form)
Как я вижу, ваши URL не определены должным образом с помощью регулярных выражений.Вы можете обновить его так:
urlpatterns = [
url(r'^user/(?P<username>[-\w]+)/post/$', PostTweet.as_view()), # or any other variable
url(r'^user/(?P<username>[-\w]+)/$', Profile.as_view()),
url(r'^$', Index.as_view()),
]
Поэтому, когда вы нажмете, чтобы увидеть PostTweet
, используйте /user/<any_username>/post/
, где any_username
может быть любым именем пользователя, которое вы хотите использовать.