【问题标题】:Problem about making correctly link a URL with a webpage有关将 URL 与网页正确链接的问题
【发布时间】:2021-03-18 08:36:59
【问题描述】:

models.py

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
#from django.contrib.postgres.fields import ArrayField

# Create your models here.
class locationData (models.Model):
    locationID = models.AutoField (primary_key = True)
    name = models.CharField (max_length = 64)
    population = models.IntegerField (default = 0, validators = [MinValueValidator(0)])
    apiEndpoint = models.URLField (max_length = 256)
    resourceURL = models.URLField (max_length = 256) 
    
    
class dateData (models.Model):
    entryID = models.AutoField (primary_key = True)
    name = models.CharField (max_length = 64)
    date = models.DateField (auto_now = False, auto_now_add = False)
    confirmedCase = models.IntegerField (default = 0, validators = [MinValueValidator(0)])
    deathCase = models.IntegerField (default = 0, validators = [MinValueValidator(0)])

views.py

from django.shortcuts import render
from django.views.generic import TemplateView, ListView, DetailView
from database.models import locationData, dateData

# Create your views here.
class viewLocationData (DetailView):
    template_name = "locationData.html"
    model = locationData
    
    def get_context_data (self,**kwargs):
        location = self.kwargs['location']
        
        context = super().get_context_data (**kwargs)
        context ['location'] = locationData.objects.get (pk = location)
        return context

app/urls.py

from django.urls import path
from database import views

urlpatterns = [
    path ('location_data/<int:location>',
    views.viewLocationData.as_view(),
    name = 'location-data')
]

配置/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path ('database/', include ('database.urls'))
]

locationData.html

<h1>Location Data</h1>

<table>
    <tr>
        <td>Location Name</td>
        <td>{{location.name}}</td>
    </tr>
    <tr>
        <td>Current Estimated Population</td>
        <td>{{location.population}}</td>
    </tr>
    <tr>
        <td>API Endpoint</td>
        <td>{{location.apiEndpoint}}</td>
    </tr>
    <tr>
        <td>URL of Resource</td>
        <td>{{location.resourceURL}}</td>
    </tr>
</table>

我是一名初学者,正在开发一个基于 Web 的应用程序,该应用程序显示特定位置的 covid 病例数据。我现在正在尝试制作一个网页,以显示有关某个位置的一些简单信息。

此网页的 URL 应为 http://localhost:8000/database/location_data/1。但是,当我测试该网页时,它无法显示并显示错误消息:

必须使用 URLconf 中的对象 pk 或 slug 调用通用详细视图 viewLocationData。

我不确定到底是哪个部分出了问题以及如何解决它。

【问题讨论】:

    标签: python django django-views django-urls


    【解决方案1】:

    您需要传递一个对象标识符 pk 或 slug。

    这里的 URLconf 使用命名组 pk - 这个名称是默认的 DetailView 用来查找主键值的名称 过滤查询集。

    试试这个

    urlpatterns = [
        path ('location_data/<int:pk>', views.viewLocationData.as_view(), name = 'location-data')
    
        or 
    
        path ('location_data/<slug:slug>', views.viewLocationData.as_view(), name = 'location-data')
    
    ]
    

    更新:

    class viewLocationData (DetailView):
        template_name = "locationData.html"
        model = locationData
        
        def get_context_data (self,**kwargs):
            location = self.kwargs['pk']
            
            context = super().get_context_data (**kwargs)
            context ['location'] = locationData.objects.get (pk = location)
            return context
    

    https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-display/#detailview

    【讨论】:

    • 我根据你的回答修改了代码,现在在views.py中的location = self.kwargs['location']似乎有一个关键错误
    • @Darth_Vader721 更新了问题。请检查。
    猜你喜欢
    • 2017-02-13
    • 2013-12-18
    • 2017-09-24
    • 2011-04-19
    • 1970-01-01
    • 2017-08-03
    • 2019-02-22
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多