【问题标题】:NoReverseMatch at /project/project 处的 NoReverseMatch
【发布时间】:2018-12-09 10:48:55
【问题描述】:

我是 Django 新手。我创建了一个简单的 createview,然后同样尝试了 updateview,但我得到了 NoReverseMatch 错误。我尝试了许多在线建议的方法,但它们似乎仍然不起作用。 这是我收到的错误截图NoReverseMatchError

以下是我的文件

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
from mapp import views 

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$',views.AboutView.as_view(),name='about'),
url(r'^blogs/$',views.BlogsView.as_view(),name='blog'),
url(r'^project/$',views.ProjectListView.as_view(),name='project_list'), 
url(r'^project/(?P<pk>\d+)/$',views.ProjectDetailView.as_view(),name='project_detail'),
url(r'^project/create/$',views.ProjectCreateView.as_view(),name='project_create'),
url(r'^project/(?P<pk>\d+)/$',views.ProjectUpdateView.as_view(),name='update'),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Views.py

from django.shortcuts import render,redirect
from django.views.generic import TemplateView,ListView,DetailView,CreateView,UpdateView
from mapp.models import Project
from mapp.forms import ProjectCreateForm,ProjectUpdateForm

# Create your views here.

class AboutView(TemplateView):
    template_name='about.html'

class BlogsView(TemplateView):
    template_name='blogs.html'

class ProjectListView(ListView):
    model=Project

class ProjectDetailView(DetailView):
    model=Project

class ProjectCreateView(CreateView):
    model=Project
    form_class=ProjectCreateForm
    redirect_field_name='mapp/project_detail.html'

class ProjectUpdateView(UpdateView):
    model=Project
    form_class=ProjectUpdateForm
    redirect_field_name='mapp/project_detail.html'

Project_detail.html

{% extends 'base.html'%}

{% block content %}
<h1>Project Details</h1>
    <div class="container">
        <h2>{{project.pname}}</h2>
        <img src="{{project.pimage.url}}"></img>
        <h2>{{project.ptech}}</h2>
        <h2>{{project.pdetails}}</h2>
    </div>

    <div class="container">
        <p><a href="{%url 'update' pk=self.pk %}">Update</a>
    </div>

{% endblock %}

Forms.py

from django import forms
from mapp.models import Project

class ProjectCreateForm(forms.ModelForm):   
    class Meta:
        model=Project
        fields=('pname','pimage','ptech','pdetails')

class ProjectUpdateForm(forms.ModelForm):   
    class Meta:
        model=Project
        fields=('pname','pimage','ptech','pdetails')

Project_form.html

{% extends 'base.html' %}

{% block content %}

<form class="project-form" method="POST" enctype="multipart/form-data">
    <div class="jumbotron">
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit" class="save btn btn-default">Save</button>
    </div>
</form>

{% endblock %}

【问题讨论】:

    标签: python django django-templates django-class-based-views


    【解决方案1】:

    看起来你的 kwargs 没有被传递给视图。尝试将模板中的self.id 更改为project.id

    {% extends 'base.html'%}
    
    {% block content %}
    <h1>Project Details</h1>
        <div class="container">
            <h2>{{project.pname}}</h2>
            <img src="{{project.pimage.url}}"></img>
            <h2>{{project.ptech}}</h2>
            <h2>{{project.pdetails}}</h2>
        </div>
    
        <div class="container">
            <p><a href="{%url 'update' pk=project.pk %}">Update</a>
        </div>
    
    {% endblock %}
    

    您的详细信息和更新视图也具有相同的 url。尝试添加一些东西以使它们与众不同

    url(r'^project/detail/(?P<pk>\d+)/$',views.ProjectDetailView.as_view(),name='project_detail'),
    url(r'^project/create/$',views.ProjectCreateView.as_view(),name='project_create'),
    url(r'^project/update/(?P<pk>\d+)/$',views.ProjectUpdateView.as_view(),name='update'),
    

    否则它不会找到更新视图。

    【讨论】:

    • 感谢李勒姆!这消除了错误,但它没有让我更新字段。单击更新按钮后,它保持在同一页面上
    • Word,检查我的答案的编辑。我认为您需要更改您的网址。
    • 也尝试在不使用pk=的情况下使用{%url 'update' project.pk %}
    • 感谢 Leelum!...您添加到答案中的编辑解决了问题!非常感谢:)
    • 不错不错。也帮助我并接受答案:)
    猜你喜欢
    • 2020-10-28
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多