找不到错误页面(404)请求方法:在Django中获取

时间:2016-03-12 22:49:30

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

下午好: 当我尝试更新“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>

有人可以解释我怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

与错误一样,没有与/ usuarios / modificar /匹配的网址。您的修改视图需要第三个段,这是一个整数(出于某种原因,您称之为电子邮件)。

您已在modificarUsuario.html内正确定义了一次链接,您可以使用{% url %}标记来构建它。但是在你刚刚链接到/ usarios / modificar /的基本模板中,它不存在;你应该使用相同的结构链接到特定用户的修改页面。

(实际上这段代码还有很多其他问题,但这对初学者来说也是如此。)