如何在django中的另一个应用程序中使用模型应用程序?

时间:2018-01-27 12:03:05

标签: python django

我正在寻找一个解决方案。我有一个网站女巫包含主要应用程序调用'bajki'。我创建了第二个应用程序调用'ustawienia'。在'ustawienia'中我想改变<head>和页脚部分中的思考:标题,元描述,页脚名称(如populars cms中的标准设置)。所以我在'ustawienia'应用程序中的models.py中创建了一个类:

# -*- coding: utf-8 -*-
from django.db import models

class Ustawienia(models.Model):
    title = models.CharField(max_length=75, verbose_name="Tytuł strony(title)")
    description = models.TextField(max_length=280, verbose_name="Opis META(description)")
    logo = models.CharField(max_length=150, verbose_name="Nazwa LOGO")
    footer = models.TextField(verbose_name="Opis stopki")

    class Meta:
        verbose_name = "Ustawienia Strony"
        verbose_name_plural = "Ustawienia Strony"

    def __str__(self):
        return self.title

我想将模型导入主应用程序调用'bajki'在应用程序'bajki'views.py中我创建:

from ustawienia.models import Ustawienia

def ustawienia(request):
    ustawienia = Ustawienia.objects.all()
    context ={'ustawienia': ustawienia,}
    return render(request, 'bajki/index.html', context=context)

在主应用'bajki'中,我在urls.py中创建了一个网址

from django.urls import path
from bajki import views

urlpatterns = [
    path('', views.ustawienia, name="ustawienia"),
]

在项目网址中,我创建了类似的内容:

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

urlpatterns = [
...
    path('', include('ustawienia.urls')),
]

最后,我想在<head>部分显示从admin site配置的网站标题: 了header.html

    <!DOCTYPE HTML>
    {% load staticfiles %}
    <html>
      <head>

        <title>{% for ustaw in ustawienia %}{{ustaw.title}}{% endfor %}</title>

结果是:原始标题消失,新标题不可见。我不知道问题出在哪里。为什么当我在管理员表单中设置标题时,此标题不可见?

2 个答案:

答案 0 :(得分:0)

这是因为你不能简单地遍历要在<title>中显示的项目。每当你在<title>中迭代循环时,HTML就会对如何表示数据感到困惑。您可以将{% for ustaw in ustawienia %}{{ustaw.title}}{% endfor %}放入<body>部分来检查该代码。

您只能在title中一次显示一个<title>

另外,改变你的bajki&gt; views.py一点点:

from ustawienia.models import Ustawienia

def ustawienia(request):
    ustawienia = Ustawienia.objects.order_by('pk')
    context ={'ustawienia': ustawienia,}
    return render(request, 'bajki/index.html', context=context)

参考此视频:https://www.youtube.com/watch?v=zcoi7Dl_LsA

答案 1 :(得分:0)

首先使用django solo包在您的ustawienia模型上使用单例模式。您希望只有一个主要设置的地方。页面上只有一个页眉和页脚。最终应该为视图提供更具体的数据,例如每个'bajka'都可以拥有自己的标题。

让我们回到主要设置模型。现在让您的解决方案正常工作将您的views.py更改为:

def ustawienia(request):
    ustawienia = Ustawienia.objects.first()
    context ={'ustawienia': ustawienia}
    return render(request, 'bajki/index.html', context=context)

和您的模板:

<title>{{ ustawienia.title }}</title>
<meta name="description" content="{{ ustawienia.description }}">

放置徽标:

{{ ustawienia.logo }}

与页脚一致:

{{ ustawienia.footer }}

最后一件事是你的视图py应放在bajki应用程序中。我的意思是:

  1. 你应该在bajki app中定义网址
  2. 你应该在bajki app中定义视图
  3. 您在bajki app中的观点应该导入Ustawienia