Я новичок в Джанго. Я создаю приложение Django с именем PhoneReview. Он будет хранить отзывы, связанные с последним мобильным телефоном. Он также будет отображать бренды телефонов, а также соответствующие модели телефонов. Я уже создал модели для:
Бренд - подробные сведения о бренде, такие как имя, происхождение, производство с тех пор и т. Д.
Модель -сведения о модели, такие как название модели, дата запуска, платформа и т. д.
Обзор - обзор статьи о мобильном телефоне и дате публикации и т. д.
Отношение «многие ко многим» между Review и Model.
Теперь мне нужно создать представления для следующего:
a. Индексная страница, отображающая все бренды, доступные для мобильного телефона в базе данных
b. Страница модели телефона, на которой отображается модель при выборе бренда.
c. Подробная страница, когда выбрана модель, содержащая обзоры и новостную ссылку
Мне удалось создать представление для "a. Индексная страница, отображающая в базе данных все бренды, доступные для мобильного телефона." Однако я застрял с "b. Страница модели телефона, на которой отображается модель при выборе бренда."
Мне удалось отобразить страницу модели телефона. Однако название модели телефона не отображается. Итак, я чувствую, что есть проблема с представлениями или шаблонами. Но я не получаю никаких ошибок при запуске сервера. Итак, я немного запутался.
Вот коды models.py приложения PhoneReview .
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
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
Воткоды urls.py приложения PhoneReview :
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'),
]
Вот коды views.py из PhoneReview app:
from django.views import generic
from .models import Brand, PhoneModel
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'
Вот коды файла base.html . Как следует из названия, это базовая страница. Он будет расширен для использования другими страницами, например brandlist.html для отображения списка брендов телефонов и phonemodel.html для отображения моделей телефонов. Он находится внутри шаблонов> Папка GameReview:
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %} {% endblock %}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<style>
/* Remove the navbar's default margin-bottom and rounded borders */
.navbar {
margin-bottom: 0;
border-radius: 0;
}
/* Add a gray background color and some padding to the footer */
footer {
background-color: #f2f2f2;
padding: 25px;
}
</style>
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Phone Radar</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li class="active">#</li>
<li><a href="#">Add Phone</a></li>
<li><a href="#">Add Review</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
</ul>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container text-left">
{% block content %} {% endblock %}
</div>
</div>
</body>
</html>
Вот коды файла brandlist.html , в котором отображается список марок телефонов. Он находится внутри шаблонов> папки GameReview. Мне удалось отобразить марки телефонов на http://127.0.0.1:8000/index.
{% extends 'PhoneReview/base.html' %}
{% load static %}
{% block title%}
Brand List
{% endblock %}
{% block content %}
<!--Page content-->
<h1>This is Brand List Page</h1>
<ul>
{% for brand in all_brands %}
<li>{{ brand.brand_name }}</li>
{% endfor %}
</ul>
<img src="{% static "images/brandlist.jpg" %}" alt="Super Mario Odyssey" /> <!-- New line -->
{% endblock %}
Вот коды файла phonemodel.html , который должен отображать марки телефонов. Тем не менее, я не могу отобразить вывод {{ phonemodel.model_name }}
при http://127.0.0.1:8000/phonemodel/1/. Это просто показывает заголовок H1. Файл находится внутри шаблонов> папка GameReview.
{% extends 'PhoneReview/base.html' %}
{% load static %}
{% block title%}
Phone Model Page
{% endblock %}
{% block content %}
<!--Page content-->
<h1>This is Phone Model Page</h1>
<ul>
{% for phonemodel in all_phonemodel %}
<li>{{ phonemodel.model_name }}</li>
{% endfor %}
</ul>
<img src="{% static "images/brandlist.jpg" %}" alt="Super Mario Odyssey" /> <!-- New line -->
{% endblock %}
Я застрял здесь. phonemodel.html должен отображать бренды телефонов. Тем не менее, я не могу отобразить вывод {{ phonemodel.model_name }}
в http://127.0.0.1:8000/phonemodel/1/. Это просто показывает заголовок H1. Там нет ошибок, показывая. Я пытался несколько часов, чтобы исправить это. Но, будучи новичком в Django, я сталкиваюсь с трудностями в его исправлении.