2

私は今、約 2 週間だけ Python を使用しており、過去 3 日間把握しようとしていた問題に遭遇しました。公式ドキュメントと、利用可能なほとんどすべてのチュートリアルと YouTube ビデオを読みました。

最初のプロジェクトとして簡単なブログを作成しようとしていますが、コメントを投稿できるセクションが必要です。コメント モデルとモデルフォームをセットアップしました。ただし、djangoにテンプレートでフォームを作成させる方法がわかりません。何も表示されません。

models.py

    from django.db import models
    from django.forms import ModelForm

    class posts(models.Model):
        author = models.CharField(max_length = 30)
        title = models.CharField(max_length = 100)
        bodytext = models.TextField()
        timestamp = models.DateTimeField(auto_now_add=True)

        def __unicode__(self):
            return self.title

    class comment(models.Model):
        timestamp = models.DateTimeField(auto_now_add=True)
        author = models.CharField(max_length = 30)
        body = models.TextField()
        post_id = models.ForeignKey('posts')

        def __unicode__(self):
            return self.body

    class commentform(ModelForm):
        class Meta:
            model = comment

ビュー.py

from django.shortcuts import render_to_response
from blog.models import posts, comment, commentform
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf


def home(request):
    entries = posts.objects.all()
    return render_to_response('index.html', {'posts' : entries})

def get_post(request, post_id):
    post = posts.objects.get(id = post_id)
    context = {'post': post}
    return render_to_response('post.html', context)

def add_comment(request, post_id):
    if request.method == 'POST':
        form = commentform(request.POST)
        if form.is_valid():
            new_comment = form.save(commit = false)
            new_comment.post_id = post_id
            new_comment.save()
    else:
        form = commentform()

    context = RequestContext(request, {
        'form': form})

    return render_to_response('post.html', context)

Urls.py

    from django.conf.urls import patterns, include, url
    from django.conf import settings
    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',
        url(r'^$', 'blog.views.home', name='home'),
        url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
        url(r'^admin/', include(admin.site.urls)),
        url(r'^(?P<post_id>.*)/$', 'blog.views.get_post'),
        url(r'^post_comment/(\d+)/$','blog.view.add_comment'),

post.html

{% extends 'base.html' %}

{% block content %}
    <p><h3> {{ post }} </h3></p>
    <p> {{ post.bodytext }} </p>

<br><br><br><br>

<form action="/post_comment/{{ post.id }}/" method="POST"> {% csrf_token %}
    {{ form }}
    <input type="submit" value="Post">
</form>

{% endblock %}

403 エラー CSRF 検証に失敗しましたが、より差し迫った問題は、{{ フォーム }} がテンプレートで何もしないことだと思います。

ホーム関数と get_post 関数は機能しており、すべての URL が適切に機能していると思います。したがって、add_comment 関数または posts.html に何か問題があると思います。

ありがとう

4

2 に答える 2

0

One thing you might check is the syntax of the render_to_response call. I believe you'll want to define it like this. (Maybe your syntax will work too, and this isn't the issue, but I have mostly seen the call made like this). This could be the cause of the missing form in the context.

return render_to_response('post.html',
                      {'form': form},
                      context_instance=RequestContext(request))

Let me know if this works. Hope this helps, Joe

Reference: https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django.shortcuts.render_to_response

于 2013-06-12T03:32:33.420 に答える