在django中如何在每个页面的域名后生成动态url?

hjzp0vay  于 2022-12-30  发布在  Go
关注(0)|答案(1)|浏览(154)

我正在建立一个博客网站,我为每篇文章设置了一个独特的标题。我想这篇文章应该有网址domain_name/<article_title>/
假设我有模型A和摩尔B:

class A(models.Model):
    title = models.CharField(max_length=500,unique=True)

class B(models.Model):
    title = models.CharField(max_length=500,unique=True)

app.urls.py file :

urlpatterns = [
    path('',view.index,name="index"),
    path('contact/', contact, name="contact"),
    path('about/', about, name="about"),
    path('terms-and-conditions/', terms, name="terms_and_conditions"),
    path('privacy/', privacy, name="privacy"),
    path('<str:title>/', article_details, name="article_details"),
]

我查看文件如下:

def article_details(request,title):
    if 'title_in_model_A':
          render 'some_page_A'
    
    if 'title_in_model_B:
          render 'some_page_B'

    render(request,'app/404.html')

项目. urls文件:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

handler404 = 'app.views.view_404'
    • 我的问题是**

1.这种类型的页面呈现是否良好?

  1. 404请求处理是否正确?
j2cgzkjk

j2cgzkjk1#

OP的方法是可以的,但是如果愿意,可以使用快捷方式get_object_or_404来简化article_details视图,例如

from django.shortcuts import get_object_or_404

def article_details(request,title):
    article = get_object_or_404(A, title=title)

为了自定义404视图,可以使用use handlers。文档中有一个很好的例子。
很难说OP的渲染是否正确,因为这个问题没有显示OP有一个view_404views.py中的衣服应用程序。
根据OP的新需求,如果有两个模型,并且希望检查是否存在标题与特定标题匹配的示例,那么OP可以使用exists(),如下所示

def article_details(request,title):
       if A.objects.filter(title=title).exists():
           # render page A
       elif B.objects.filter(title=title).exists():
           # render page A
       else:
            # 404

注意,如果你不需要模型而只是检查模型的存在性,这个方法是很好的。如果你确实需要它,那么你可以在条件中包含以下内容(在渲染之前)

my_model = MyModel.objects.get(title=title)

相关问题