Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

165
Visualizações
Django 2 ruta de URL que coincide con el valor negativo

En Django <2, la forma normal de hacer esto es usar expresiones regulares. Pero ahora se recomienda en Django => 2 usar path() en lugar de url()

 path('account/<int:code>/', views.account_code, name='account-code')

Esto se ve bien y funciona bien con el patrón de URL coincidente

 /account/23/ /account/3000/

Sin embargo, este problema es que también quiero que esto coincida con un entero negativo como

 /account/-23/

Por favor, ¿cómo hago esto usando path ()?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puede escribir un convertidor de ruta personalizado :

 class NegativeIntConverter: regex = '-?\d+' def to_python(self, value): return int(value) def to_url(self, value): return '%d' % value

En urls.py:

 from django.urls import register_converter, path from . import converters, views register_converter(converters.NegativeIntConverter, 'negint') urlpatterns = [ path('account/<negint:code>/', views.account_code), ... ]
over 4 years ago · Santiago Trujillo Relatório

0

Soy demasiado perezoso para hacer un convertidor de ruta elegante, así que lo capturé como una cadena y lo convertí en un número entero en la vista (con algunas comprobaciones básicas de cordura para asegurarme de que el valor se pueda convertir correctamente en un número entero):

urls.py

 urlpatterns = [ path('account/<str:code>/', views.account_code), ... ]

vistas.py (nuevo)

Ejemplo de vista basada en funciones (FBV):

 from django.http import HttpResponseNotFound def your_view(request, code): try: code = int(self.kwargs['code']) except ValueError: # produces HTTP status code 404: Not Found return HttpResponseNotFound( "'code' must be convertible to an integer.")

Ejemplo de vista basada en clases (CBV):

 from django.http import HttpResponseNotFound from django.views.generic import TemplateView class CodeView(TemplateView): def dispatch(self, request, *args, **kwargs): try: code = int(self.kwargs['code']) except ValueError: # produces HTTP status code 404: Not Found return HttpResponseNotFound( "'code' must be convertible to an integer.") return super().dispatch(request, *args, **kwargs)

Si quisiera que el usuario supiera que ocurrió un error del lado del cliente, podría sustituir HttpResponseNotFound con HttpResponseBadRequest , lo que daría un código de estado HTTP 400 (Solicitud incorrecta)


EDITAR: la versión a continuación produce un código de respuesta HTTP de error del servidor y probablemente no sea deseable (puede aparecer en los registros de errores, etc.)

views.py (antiguo, dejado aquí por razones históricas)

 try: code = int(self.kwargs['code']) except ValueError: # produces HTTP status code 500: Internal Server Error raise ValueError("'code' must be convertible to an integer.")
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda