Django动态页面生成

时间:2019-08-05 12:54:13

标签: django django-models django-templates django-views

我正在学习Django,并为自己做一个项目。

项目简介:这是一个旅行应用程序,用户必须在其中选择目的地。目的地将由管理员/超级用户从“管理”面板添加。

现在,我可以从“管理”面板动态添加目录。

我想要的是:当用户单击特定的目标位置时,应打开目标页面。因为内容来自数据库(也就是说,如果数据库中有1行,它将显示1个目标)。

现在我想知道如何根据可用的内容创建网页?

Image of the code snippet of the destination

在“ destinations.html”中,我应该添加些什么,以便它在添加新的目标位置时创建一个页面,以及为该页面创建一个动态URL。

例如我有1个目的地,当我单击它时,它将打开目的地的页面(可以通过创建新的视图对象来完成)。但是,假设我添加了一个新的目的地,它将为该第二个目的地创建一个页面。

1 个答案:

答案 0 :(得分:0)

足够简单,使用url标记

即这是您的URLconf:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.IndexView, name = 'home'),
    path('<dest_name>', views.DestinationView, name = 'destination')
]

您的views.py

from django.shortcuts import render
from .models import *

# Create your views here.

def IndexView(request):
    destinations = Destinations.objects.all()
    context = {'destinations': destinations}
    return render(request, 'index.html', context)
def DestinationView(request, dest_name):
    destination = get_object_or_404(Destinations, name = dest_name)
    context = {'destination': destination}
    return render(request, 'destination.html', context)

您的index.html

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>Home</title>

</head>

<body>
 {% for dest in destinations %}
   <a href = '{% url 'destination' dest.name %}'>{{dest.name}}</a>
   {% endfor %}
</body>
</html>

我在url标记中添加的dest.name将替换dest_name,而destination是我在urls.py中分配的名称

希望能解决您的问题