下午好: 当我尝试更新“Usuario”时,我看到了Django的这个错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/usuarios/modificar/
Using the URLconf defined in COMBOOK.urls, Django tried these URL patterns in this order:
^ ^$ [name='login']
^ ^cerrar/$ [name='logout']
^ ^registrarse/$ [name='registrarse']
^autor/
^libros/
^usuarios/ ^registrar/$ [name='registrar_usuario']
^usuarios/ ^reportar/$ [name='reportar_usuario']
^usuarios/ ^modificar/(?P<email>\d+)/$ [name='modificar-usuario']
^tipos_usuario/
^admin/
^media/(?P<path>.*)$
The current URL, usuarios/modificar/, didn't match any of these.
此文件为models.py
from django.db import models
from apps.tipos_usuario.models import Tipo_Usuario
class Usuario(models.Model):
email = models.CharField(max_length = 80, verbose_name = 'Email', unique = True)
contrasena = models.CharField(max_length = 50, verbose_name = 'Contrasena')
nombres = models.CharField(max_length = 80, verbose_name = 'Nombres')
apellidos = models.CharField(max_length = 80, verbose_name = 'Apellidos')
opciones_genero = (
('F', 'F',),
('M', 'M',),
)
genero = models.CharField(max_length = 1, choices = opciones_genero)
fecha_nacimiento = models.DateField(blank=True, null=True, verbose_name="Fecha de Nacimiento")
tipo_usuario = models.ForeignKey(Tipo_Usuario, verbose_name = 'Tipo Usuario')
def _unicode_(self):
return self.email
def get_email(self):
return self.email
这是urls.py
from django.conf.urls import patterns, include, url
from .views import RegistrarUsuario, ReportarUsuario, ModificarUsuario
urlpatterns = patterns('',
url(r'^registrar/$' , RegistrarUsuario.as_view() , name="registrar_usuario"),
url(r'^reportar/$' , ReportarUsuario.as_view() , name="reportar_usuario"),
url(r'^modificar/(?P<email>\d+)/$', ModificarUsuario.as_view(),name='modificar-usuario'),
)
这是views.py
from django.views.generic import CreateView,TemplateView,ListView, UpdateView
from braces.views import LoginRequiredMixin # handles authentication
from .models import Usuario
from apps.usuarios.models import Usuario
from apps.tipos_usuario.models import Tipo_Usuario
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
class RegistrarUsuario(CreateView):
template_name = 'usuarios/registrarUsuario.html'
model = Usuario
success_url = reverse_lazy('reportar_usuario')
class ReportarUsuario(ListView):
template_name = 'usuarios/reportarUsuarios.html'
model = Usuario
context_object_name = 'usuarios'
paginate_by = 2
class ModificarUsuario(LoginRequiredMixin, UpdateView):
template_name = 'usuarios/modificarUsuario.html'
model = Usuario
success_url = reverse_lazy('modificar-usuario')
def get_object(self):
return Usuario.objects.get(email=self.request.GET.get('email'))
这是modificarUsuario.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Modificar Usuario</title>
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css">
</head>
<body>
<h1>Modificar Usuario</h1>
<ul>
{% for usuario in usuarios %}
<li class="contact">{{ usuario }}
(<a href="{% url "modificar-usuario" pk=email %}">Editar</a>)
</li>
{% endfor %}
</ul>
</body>
</html>
我有一个名为“base.html”的文件,我尝试在class = nav中的选项中调用html文件“modificarUsuario.html”:
<li><a href="/usuarios/modificar/">Modificar Usuario</a></li>
有人可以解释我怎么解决这个问题?
答案 0 :(得分:1)
与错误一样,没有与/ usuarios / modificar /匹配的网址。您的修改视图需要第三个段,这是一个整数(出于某种原因,您称之为电子邮件)。
您已在modificarUsuario.html内正确定义了一次链接,您可以使用{% url %}
标记来构建它。但是在你刚刚链接到/ usarios / modificar /的基本模板中,它不存在;你应该使用相同的结构链接到特定用户的修改页面。
(实际上这段代码还有很多其他问题,但这对初学者来说也是如此。)