python - Django:在第二个模板中添加可点击链接的问题
问题描述
我是 Django 的初学者。我正在构建一个名为 PhoneReview 的 Django 应用程序。它将存储与最新手机相关的评论。它还将显示手机品牌以及相关的手机型号。
我已经创建了模型和视图。我还设法在第一个模板(brandlist.html)中添加了可点击的链接。在第一个模板中,当您单击品牌名称时,例如三星,您将被带到手机型号的页面,例如 Galaxy S10。这是第一个模板的屏幕截图:
当您单击该链接时,您将被带到第二个模板 (phonemodel.html)。但现在,我面临一个问题。手机型号(“Galaxy S10”)上没有可点击的链接,可将您引导至 details.html。这是屏幕截图。
以下是“PhoneReview”文件夹中models.py的代码:
from django.db import models
from django.template.defaultfilters import slugify
# Create your models here.
class Brand(models.Model):
brand_name = models.CharField(max_length=100)
origin = models.CharField(max_length=100)
manufacturing_since = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.brand_name
def save(self, *args, **kwargs):
self.slug = slugify(self.brand_name)
super().save(*args, **kwargs)
class PhoneModel(models.Model):
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
model_name = models.CharField(max_length=100)
launch_date = models.CharField(max_length=100)
platform = models.CharField(max_length=100)
def __str__(self):
return self.model_name
class Review(models.Model):
phone_model = models.ManyToManyField(PhoneModel, related_name='reviews')
review_article = models.TextField()
date_published = models.DateField(auto_now=True)
slug = models.SlugField(max_length=150, null=True, blank=True)
def __str__(self):
return self.review_article
以下是“PhoneReview”文件夹中 urls.py 的代码:
from . import views
from django.urls import path
urlpatterns = [
path('index', views.BrandListView.as_view(), name='brandlist'),
path('phonemodel/<int:pk>/', views.ModelView.as_view(), name='modellist'),
path('details/<int:pk>/', views.ReviewView.as_view(), name='details'),
]
以下是“PhoneReview”文件夹中views.py的代码:
from django.views import generic
from .models import Brand, PhoneModel, Review
class BrandListView(generic.ListView):
template_name = 'PhoneReview/brandlist.html'
context_object_name = 'all_brands'
def get_queryset(self):
return Brand.objects.all()
class ModelView(generic.DetailView):
model = PhoneModel
template_name = 'PhoneReview/phonemodel.html'
class ReviewView(generic.DetailView):
model = Review
template_name = 'PhoneReview/details.html'
以下是“PhoneReview”文件夹中apps.py 的代码:
from django.apps import AppConfig
class PhonereviewConfig(AppConfig):
name = 'PhoneReview'
以下是“模板”文件夹中 details.html 的代码:
{% extends 'PhoneReview/base.html' %}
{% load static %}
<html>
<link rel="stylesheet" type="text/css" href="{% static "css/style.css" %}">
<html lang="en">
{% block title%}Details{% endblock %}
{% block content %}
<h1>This is the Details Page</h1>
<h2>Review:</h2>
<p>{{ review.review_article }}</p>
<h2>News Link:</h2>
<p>{{ review.slug }}</p>
{% endblock %}
</html>
以下是“templates”文件夹中phonemodel.html的代码:
{% extends 'PhoneReview/base.html' %}
{% load static %}
{% block title%}
Phone Model Page
{% endblock %}
{% block content %}
<!--Page content-->
<h1>This is Phone Model Page</h1>
<h2>Here is the phone model</h2>
<ul>
<li>{{ phonemodel.model_name }}</li>
</ul>
<img src="{% static "images/brandlist.jpg" %}" alt="Super Mario Odyssey" /> <!-- New line -->
{% endblock %}
我尝试<li>{{ phonemodel.model_name }}</li>
用<li><a href = "{% url 'details' brand.id %}">{{ phonemodel.model_name }}</a></li>
. 但我收到一个错误,如下所示:
NoReverseMatch at /phonemodel/1/
Reverse for 'details' with arguments '('',)' not found. 1 pattern(s) tried: ['details/(?P<pk>[0-9]+)/$']
我该如何解决这个问题?
解决方案
没有命名的上下文变量brand
,你也不需要它。您应该id
使用phonemodel
:
<li>
<a href = "{% url 'details' phonemodel.id %}">
{{ phonemodel.model_name }}
</a>
</li>
推荐阅读
- r - 在geom_point中使用cut时如何在ggplot中添加椭圆
- html - 当最后一个路由字符不带/带'/'时,Express 服务器分别加载带/不带 css/js 的 html 页面
- laravel - Vue:如何刷新新数据?
- java - 使用 gradle 构建 android 应用时的问题
- java - 如何测试 RestTemplate 的线程安全性?
- java - 使用服务时更新 ProgressBar 的进度?
- android - 在列表视图中单击时更改 Viewpager 中的选项卡位置
- javascript - javascript中的全局变量是否应该始终避免?
- java - 如何使用 lambda 和条件修复从列表中删除重复项
- php - 页面不会重定向,因为没有插入数据