Как сделать страницу 404 для одного просмотра? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть функциональное представление, которое я хочу, если я задаю URL, чтобы показать страницу 404.

Я знаю, что его можно установить в файле settings.py с помощью DEBUG = True, но у меня серьезные проблемы с этим.

Теперь я могу сделать только эту страницу с Http404?

url.py

url(r'^reporte_servicio_externo/(?P<pk>[\w{}.-]{20})/$', 'apps.servicios.views.reporte_servicio_externo',
      name='reporte_servicio_externo')

view.py

def reporte_servicio_externo(request, pk):
    anuncio = Anuncio.objects.get(pk=get_unhash(pk))
    anuncioproyectos = AnuncioProyectos.objects.filter(anuncio=anuncio)
    cadena_tipo_carga = []
    cadena_actividad = []
    cadena_trafico = []
    cadena_escala = []
    cadena_ambito = []
    cadena_articulo = []
    cadena_tipo_producto = []
    cadena_muelles = []

    title_meta = 'Reporte Anuncio'
    title = 'Reporte Anuncio'

    if anuncio.tipo_carga:
        tipo_carga = anuncio.tipo_carga.all()
        for i in tipo_carga:
            cadena_tipo_carga.append(i.nombre)

    if anuncio.amarraderos:
        amarraderos = anuncio.amarraderos.all().values('nombre')
        for item in amarraderos:
            cadena_muelles.append(item['nombre'])

    for item in anuncioproyectos:
        if item.escala:
            cadena_escala.append(item.escala)

        if item.ambito:
            cadena_ambito.append(item.ambito.nombre)

        if item.articulo:
            cadena_articulo.append(item.articulo.nombre)

        if item.tipo_producto:
            cadena_tipo_producto.append(item.tipo_producto.nombre)

        for i in item.actividad.all():
            cadena_actividad.append(i.nombre)

        for i in item.tipo_trafico.all():
            cadena_trafico.append(i.nombre)

    cadena_tipo_carga = ", ".join(list(set(cadena_tipo_carga)))
    cadena_actividad = ", ".join(list(set(cadena_actividad)))
    cadena_trafico = ", ".join(list(set(cadena_trafico)))
    cadena_escala = ", ".join(list(set(cadena_escala)))
    cadena_ambito = ", ".join(list(set(cadena_ambito)))
    cadena_articulo = ", ".join(list(set(cadena_articulo)))
    cadena_tipo_producto = ", ".join(list(set(cadena_tipo_producto)))
    cadena_muelles = ", ".join(list(set(cadena_muelles)))

    return render('externo/ServicioExterno/reporte_servicio_externo.html', locals(), context_instance=ctx(request))

Попробуйте этот пример, но ничего. Но мне чего-то не хватает, но я не знаю, что это такое.

пример django docs

from django.http import Http404
from django.shortcuts import render
from polls.models import Poll

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404("Poll does not exist")
    return render(request, 'polls/detail.html', {'poll': p})```

1 Ответ

0 голосов
/ 08 июня 2019

Если я правильно понимаю вашу проблему, вы хотите показать 404, если они достигли этого URL (а затем и этого представления), и этого объекта больше нет.Конечно, есть способ сделать это.Есть нечто, называемое get_object_or_404 , которое делает именно это.Вот как вы его используете

from django.shortcuts import get_object_or_404
anuncio = get_object_or_404(Anuncio, pk=get_unhash(pk))

Итак, если он не найдет object с указанным pk, он выдаст 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...