我有一个视图,该视图接收一个参数以构成查询过滤器并显示一些结果。
此视图的URL为:
views.ProdCatDetail
urlpatterns = [
path('', views.allCat, name = 'allCat'),
path('<slug:c_slug>', views.ProdCatDetail, name = 'ProdCatDetail'),
]
问题是,如果我想通过以下方式访问管理面板:
http://127.0.0.1:8000/admin
我无法欣赏风景
views.ProdCatDetail
被调用,并且由于没有类别“ admin”,所以出现错误:
DoesNotExist at /admin
Category matching query does not exist.
如何避免这种情况,而无需在 views.ProdCatDetail 视图中使用另一个URL?
更新1:
此视图过滤类别模型,并过滤产品模型以获取与此类别相对应的所有产品。
正如您在URL中看到的那样,它接受1个参数,即:<slug:c_slug>
,但是,http://127.0.0.1:8000/admin
中的admin被认为是一个ug,但不应这样做,因为我只使用此URI进入管理面板。
我尝试使用if和stament控制此流程:
if c_slug is not "muestras" and not "admin"
但是现在我得到了:
/ p中的UnboundLocalError 赋值之前引用的本地变量“类别”
def ProdCatDetail(request, c_slug):
if c_slug is not "muestras" and not "admin":
try:
category = Category.objects.get(slug=c_slug)
products = Product.objects.filter(category__slug=c_slug)
except Exception as e:
raise e
return render(request, 'shop/productos_por_categoria.html', {'category':
category, 'products': products})
答案 0 :(得分:2)
我认为您可以通过在URLconf中为AdminSite
添加显式路径来解决此问题。
尝试在具有views.ProdCatDetail
视图的路径上上方添加以下行。
path('admin/', admin.site.urls),
但是请记住,您应该使用以下命令添加管理软件包:
from django.contrib import admin