未找到参数得“Project Detail”得反向。 已尝试1个模式:['projects/(?p
请求方法:GET
请求URL:http://localhost:8000/projects/yourprojects
Django版本:3.0.4
异常类型:NoReverseMatch
异常值:未找到参数的“project detail”的Reverse。 已尝试1个模式:['projects/(?p
urls.py文件
from django.urls import path, include
from . import views
urlpatterns = [
path('newproject', views.newproject, name='newproject'),
path('yourprojects', views.yourprojects, name='yourprojects'),
path('<int:projectinfo_id>/', views.projectDetail, name='projectDetail'),
]
views.py文件
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from .models import Projectinfo
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt,csrf_protect
def home(request):
return render(request, 'projects/home.html')
def yourprojects(request):
projectinfo = Projectinfo.objects
return render(request, 'projects/yourprojects.html', {'projectinfo':projectinfo})
@login_required
def newproject(request):
if request.method == 'POST':
if request.POST['title'] and request.POST['branch'] and request.POST['directorate'] and request.POST['email'] and request.POST['program_service'] and request.POST['giturl']:
projectinfo = Projectinfo()
projectinfo.title = request.POST['title']
projectinfo.branch = request.POST['branch']
projectinfo.directorate = request.POST['directorate']
projectinfo.email = request.POST['email']
projectinfo.program_service = request.POST['program_service']
if request.POST['giturl'].startswith('http://') or request.POST['giturl'].startswith('https://'):
projectinfo.giturl = request.POST['giturl']
else:
projectinfo.giturl = 'http://' + request.POST['giturl']
projectinfo.pub_date = timezone.datetime.now()
projectinfo.project_lead = request.user
projectinfo.save()
return redirect('/projects/' + str(projectinfo.id))
else:
return render(request, 'projects/newproject.html', {'error': 'All fields are required'})
else:
return render(request, 'projects/newproject.html')
def projectDetail(request, projectinfo_id):
projectinfo = get_object_or_404(Projectinfo, pk=projectinfo_id)
return render(request, 'projects/projectDetail.html', {'projectinfo': projectinfo})
yourprojects.html
{% extends 'base.html' %}
{% block content %}
{% load static %}
<main>
<div class="container">
<h3 class="center">Your Projects</h3>
{% for projectinfo in projectinfo.all %}
<div class="row" onclick="window.location='{% url 'projectDetail' projectinfo.id %}';">
<div class="col s6 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">{{ projectinfo.title }}</span>
<div class="card-image">
<img class="align-center" src="{% static 'Images/RandESmall.svg' %}" width="179" height="135">
</div>
<p>This is ROE Comments. A projects that uses natural language processing to help improve and streamline the EI Process.</p>
</div>
<div class="card-action">
<a class="center" href="{% url 'projectDetail' projectinfo.id %}">View / Edit</a>
</div>
</div>
</div>
{% endfor %}
</div>
</main>
{% endblock %}
url正则表达式应为数字[0-9]+
:
(?P<projectinfo_id>[0-9]+)
但是您要传入alpha:yourprojects
http://localhost:8000/projects/yourprojects
尝试,传入一个数字或更新正则表达式:
(?P<projectinfo_id>[0-9a-z]+)
或者更新项目的url,具体取决于get请求的目的地:
path('^projects/yourprojects/$', views.yourprojects, name='yourprojects'),
并尝试使用/不使用尾随斜杠:
http://localhost:8000/projects/yourprojects
http://localhost:8000/projects/yourprojects/