当前位置:   article > 正文

Django实践:创建表单,debug--NoReverseMatch at /topics/1/和Page not found (404),分析与解决_django page not found

django page not found

Django实践:创建表单

创建表单步骤

  1. 在当前应用中添加一个新的forms.py,在里面创建表单,包括主题和条码项
from django import forms
from .models import Topic, Entry

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

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['text']
        labels = {'text': ''}
        widgets = {'text': forms.Textarea(attrs={'cols': 80})}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. 映射URL,在urls.py中添加Topic和Entry的url模式
    # Page for adding a new topic.
    re_path('^new_topic/$', views.new_topic, name='new_topic'),

    # Page for adding a new entry.
    re_path('^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'),
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 编写视图函数,在views.py中
from django.shortcuts import render
from django.http import HttpResponseRedirect, Http404
from django.urls import reverse

from .models import Topic, Entry
from .forms import TopicForm, EntryForm

def new_topic(request):
    """Add a new topic."""
    if request.method != 'POST':
        # No data submitted; create a blank form.
        form = TopicForm()
    else:
        # POST data submitted; process data.
        form = TopicForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topics'))

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


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

    if request.method != 'POST':
        # No data submitted; create a blank form.
        form = EntryForm()
    else:
        # POST data submitted; process data.
        form = EntryForm(data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topic',
                                                args=[topic_id]))

    # context = {'topic': topic, 'form': form, 'topic_id': topic_id}
    context = {'topic': topic, 'form': form}
    return render(request, 'learning_logs/new_entry.html', context)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  1. 新建new_topic的模板new_topic.html,并在topics.html中添加new_topic的链接
<a href="{% url 'learning_logs:new_topic'%}">Add a new Topic:</a>
  • 1
  1. 新建new_entry的模板new_entry.html,并在topic.html中添加new_entry的链接
<a href="{% url 'learning_logs:new_entry' topic.id %}">Add a new Entry:</a>
  • 1

debug

错误一:NoReverseMatch at /topics/1/

  Reverse for ‘new_entry’ with no arguments not found. 1 pattern(s) tried: [‘new_entry/(?P<topic_id>\d+)/$’]
在这里插入图片描述
  分析:反解析‘new_entry’时候未找到没有参数的‘new_entry’,因为views.py中的new_entry(request, topic_id)函数有另外的参数topic_id,说明在调用的时候没有将topic_id的参数传给views.py中的函数,也没有传给urls.py中的re_path()函数。
在这里插入图片描述
  解决:错误是在topic.html中,在向topic.html中添加new_entry页面链接的时候,未把topic_id参数传递给new_entry的re_path()函数和new_entry(request, topic_id)函数。

  错误代码如下:

<a href="{% url 'learning_logs:new_entry'%}">Add a new Entry:</a>
  • 1

  修改后:

<a href="{% url 'learning_logs:new_entry' topic.id %}">Add a new Entry:</a>
  • 1

错误二:Page not found (404)

  进入topic页面点击Add a new Entry链接时候,出现找不到页面的情况:
在这里插入图片描述
  分析:页面的链接不对
  解决:错误是在topic.html中,在%和}多了一个空格,导致超链接解析错误。
在这里插入图片描述
  错误代码如下:

<a href="{% url 'learning_logs:new_entry' topic.id % }">Add a new Entry:</a>
  • 1

  修改后:

<a href="{% url 'learning_logs:new_entry' topic.id %}">Add a new Entry:</a>
  • 1

参考文献

  1. 《Python编程从入门到实践》:https://ehmatthes.github.io/pcc/
  2. Django帮助文档:https://docs.djangoproject.com/zh-hans/2.0/
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/80591
推荐阅读
相关标签
  

闽ICP备14008679号