【发布时间】:2021-06-01 11:17:20
【问题描述】:
我已经设法在我的 Django 项目中设置了一个模型,并且可以在其中创建帖子并通过视图和模板显示这些帖子,但是,我似乎无法对新模型做同样的事情。已创建。我已经尝试像对初始模型所做的那样执行此操作,即设置自己的 html 文件,就像第一个一样,以及主项目文件夹中 urls.py 和 view.py 中的类似条目应用程序文件夹。
编辑以获得更多上下文:基本上,文章模型已使用模板 article_detail.html 和 article_list.html 设置,并且该模型中的所有条目都是从管理应用程序中提取的,并且是可见。我已经创建了另一个模型,进攻性,并且也想对文章条目做同样的事情,所以我尝试复制我所做的并将进攻性模型制作为自己的模板(offensive_detail.html 和进攻性列表.html:)。 然而,这似乎没有奏效。在 base_template.html 上为 Offensive 创建一个链接不会去任何地方,它只是停留在同一页面上。不会重定向到将显示攻击性文章列表的攻击性详细信息页面。
我的目的是让不同的类别与不同的模型保持一致,并将所有这些类别和相应的页面作为导航栏中的链接。
我不完全确定我哪里出错了,或者即使我几乎是正确的。 非常感谢您的帮助。
Here is the folder structure of my project
app文件夹下的文件:
article_detail.html:
{% extends 'base_layout.html' %}
{% block content %}
<div class="article-detail">
<div class="article">
<h2>{{ article.title }}</h2>
<p>{{ article.body }}</p>
<p>{{ article.date }}</p>
</div>
</div>
{% endblock %}
article_list.html:
{% extends 'base_layout.html' %}
{% block content %}
<h1>Articles List</h1>
<div class="articles">
{% for article in articles %}
<div class="article">
<h2><a href="{% url 'articles:detail' slug=article.slug %}">{{ article.title }}</a></h2>
<p>{{ article.date }}</p>
</div>
{% endfor %}
</div>
</body>
{% endblock %}
offensive_detail.html:
{% extends 'base_layout.html' %}
{% block content %}
<div class="offensive_articles">
<div class="offensive_list">
<h2>{{ offensive_article.title }}</h2>
<p>{{ offensive_article.body }}</p>
<p>{{ offensive_article.date }}</p>
</div>
</div>
{% endblock %}
offensive_list.html:
{% extends 'base_layout.html' %}
{% block content %}
<h1>Offensive Articles List</h1>
<div class="offensive_articles">
{% for offensive_article in offensive_articles %}
<div class="offensive_article">
<h2><a href="{% url 'articles:offensive_article' slug=article.slug %}">{{ offensive_article.title }}</a></h2>
<p>{{ offensive_article.date }}</p>
</div>
{% endfor %}
</div>
</body>
{% endblock %}
models.py:
from django.db import models
from PIL import Image
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField() # URL of post
body = models.TextField()
date = models.DateTimeField(auto_now_add=True) # auto populate with the current time
thumb = models.ImageField(default='default.jpg', blank=True)
# add in author
def __str__(self):
return self.title
class Offensive(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField() # URL of post
body = models.TextField()
date = models.DateTimeField(auto_now_add=True) # auto populate with the current time
thumb = models.ImageField(default='default.jpg', blank=True)
def __str__(self):
return self.title
urls.py:
from django.urls import path
from django.conf.urls import url
from . import views
app_name = 'articles'
urlpatterns = [
url(r'^$', views.article_list, name="list"),
url(r'^$', views.offensive_list, name="offensive_list"),
url(r"^(?P<slug>[\w-]+)/$", views.article_detail, name="detail"),
url(r"^(?P<slug>[\w-]+)/$", views.offensive_detail, name="offensive_detail"),
]
views.py:
from django.http import HttpResponse
from django.shortcuts import render
from .models import Article, Offensive, Defensive, Fitness, Coding
def article_list(request):
articles = Article.objects.all().order_by('date')
return render(request, 'articles/article_list.html', {'articles': articles})
def about(request):
#return HttpResponse('about')
return render(request, 'about.html')
def article_detail(request, slug):
#return HttpResponse(slug)
article = Article.objects.get(slug=slug)
return render(request, 'articles/article_detail.html', { 'article':article })
def offensive_list(request):
offensive_articles = Offensive.objects.all().order_by('date')
return render(request, 'articles/offensive_list.html', { 'offensive_article': offensive_article })
def offensive_detail(request, slug):
#return HttpResponse(slug)
offensive_article = Offensive.objects.get(slug=slug)
return render(request, 'articles/offensive_detail.html', { 'offensive_article': offensive_article })
从主文件夹“网站”:
ursl.py:
"""website URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url, include
from . import views
from articles import urls
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings
from articles import views as article_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^articles/', include('articles.urls')),
url(r'^about/$', views.about),
url(r'^$', article_views.article_list, name="home"),
url(r'^offensive/', include('articles.urls')),
url(r'^$', article_views.offensive_list, name="offensive"),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
base_template.html:
{% load static %}
<!-- Bootstrap CDN -->
<link rel="stylesheet" href="{% static 'styles.css' %}" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Montserrat&family=Orbitron:wght@900&display=swap" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<!-- this will apear everywhere -->
<!DOCTYPE html>
<html>
<head>
<title>Articles</title>
<nav class="navbar navbar-dark bg-dark">
<div class="container-fluid">
<!-- Logo -->
<div class="navbar-header">
<!-- <button class="navbar-toggler navbar-toggler-left" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button> -->
<a class="navbar-brand" href="{% url 'home' %}" style="font-family: 'Montserrat', sans-serif; font-family: 'Orbitron',sans-serif; color:red;">Neophyte</a>
</div>
<!-- Item -->
<div>
<ul class="nav navbar-nav">
<li class="active">
<a href="{% url 'offensive' %}" style="font-family: 'Montserrat', sans-serif; font-family: 'Orbitron',sans-serif; color:white"> Offensive
</a>
</li>
</div>
</div>
</nav>
</head>
<body>
<div class="wrapper">
{% block content %}
{% endblock %}
</div>
</body>
</html>
<!-- <img src="{% static 'Neophyte_logo.jpg' %}"/> -->
<!-- href="{% url 'offensive' %}" -->
【问题讨论】:
-
我从您的帖子中不清楚实际问题是什么。请描述您遇到了什么错误,或者什么没有按预期工作。
-
抱歉,来晚了,我的大脑被炸了。包含并编辑以上更多上下文。
-
谢谢,但我仍然不清楚这个问题。我认为相关的句子是“在 base_template.html 上为 Offensive 创建链接不会去任何地方。” - 但你似乎没有分享 base_template ,我也不知道“哪儿也不去”是什么意思。如果您的意思是单击链接时似乎什么都不做,您是否尝试过检查实际的 HTML?
-
再次更新以包含 base_template.html 并进一步澄清:“在 base_template.html 上为 Offensive 创建链接不会去任何地方,它只是停留在同一页面上。不会重定向到令人反感的详细信息页面,将显示令人反感的文章列表。”基本上,如何在导航栏中为我的应用程序中的每个模型创建链接,以显示我在这些模型中创建的条目?