0

下午好: 我看到Django的這個錯誤,當我嘗試更新「Usuario」:錯誤頁面沒有找到(404)請求方法:t GET在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文件」裏我嘗試調用的HTML文件「modificarUsuario.html」一個選項裏面的一類= nav:

<li><a href="/usuarios/modificar/">Modificar Usuario</a></li> 

有人能解釋我怎麼解決這個問題?

回答

1

就像錯誤說的那樣,沒有隻匹配/ usuarios/modificar /的URL。您的修改視圖需要第三個分段,它是一個整數(由於某種原因,您稱其爲電子郵件)。

您已經正確定義了鏈接一次,位於modificarUsuario.html中,您可以在其中使用{% url %}標記構建它。但是在剛剛鏈接到/ usarios/modificar /的基本模板中,該模板不存在;您應該使用相同的結構鏈接到特定用戶的修改頁面。

(實際上這個代碼有很多其他的錯誤,但是這對初學者是有用的。)