我似乎无法解决这段代码(python速成课程)

2021-10-17 17:55:14 发布

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

我对Python和Django非常陌生,我正在学习ericmatthes的Python速成课程(第1版)。在第19章之前,一切都运行得很好,当时我正在为用户添加功能,以便向主题添加条目。基本上,它是一个网络应用程序,它的工作方式有点像一本日记,记录你所学到的关于特定主题的东西。你知道吗

我加入了一些print语句,试图找出问题的确切位置,并且从中可以看出def new\u entry函数中的if语句似乎存在问题视图.py. 我不知道从这里到底要去哪里。在当前代码中,我只有第一条if语句正下方的一条语句执行print(“这是在请求一个新表单”)

我的视图.py带相关条目的文件

def new_entry(request, topic_id):
    """Add a new entry for a particular topic."""
    topic = Topic.objects.get(id=topic_id)

    if request != 'POST':
        # No data submitted; create blank form
        form = EntryForm()
        print("this is requesting a new form")
    else:
        print("else statment runs?")
        # POST data submitted; process data.
        form = EntryForm(data=request.POST)
        print("The else statment is running")
        if form.is_valid():
            print("the form.is_valid function works")
            new_entry = form.save(commit=False)
            new_entry.topic = topic
            new_entry.save()
            print("new_entry saved!")
            return HttpResponseRedirect(reverse('learning_logs:topic', args=[topic_id]))

    context = {'topic': topic, 'form': form}
    print(context)
    return render(request, 'learning_logs/new_entry.html', context)

我的表单.py包含窗体的

from django import forms

from .models import Topic, Entry


class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic
        fields = ['text']
        labels = {'test': ''}


class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['text']
        labels = {'text': ''}
        widgets = {'text': forms.Textarea(attrs={'cols': 80})}

新条目模板

{% extends "learning_logs/base.html" %}

{% block content %}

  <p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>

  <p>Add a new entry:</p>
  <form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'>
      {% csrf_token %}
      {{ form.as_p }}
      <button name='submit'>add entry</button>
  </form>

{% endblock content %}

我有种感觉,我错过了一些简单的东西,但如果我需要的话,我会把所有东西添加到git hub repo中,这样你就可以在需要时查看那里。你知道吗