Django:尝试从两个视图中获取数据以显示在一个索引页上

2024-09-30 01:35:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的索引页上显示来自两个不同应用程序的内容,其中有两个不同的视图。你知道吗

我做了一个视图.py为了让我的项目处理索引页,我正在尝试将我的两个应用程序中的模型实例连接到它。我没有得到任何错误,但我不能得到任何东西显示以外的东西在我的电脑基本.html. 你知道吗

下面是代码和图片,显示正在发生的事情和我正在尝试做的事情。你知道吗

项目视图.py地址:

from django.shortcuts import render
from colorsets.models import ColorSet
from adminpanel.models import Widget
from django.utils import timezone

from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse,reverse_lazy

def home(request, template='index.html'):
    context = {
        'widget': ColorSet.objects.all(),
        'color_set': Widget.objects.all(),
        }
    return render(request, template, context)

项目网址.py地址:

"""colors URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from accounts import views
from colorsets import views
from colors import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',views.home,name='index'),
    url(r'^accounts/',include('accounts.urls',namespace='accounts')),
    url(r'^colorsets/',include('colorsets.urls',namespace='colorsets')),
    url(r'^adminpanel/',include('adminpanel.urls',namespace='adminpanel')),
]

颜色集应用程序网址.py地址:

from django.conf.urls import url
from colorsets import views

app_name = 'colorsets'

urlpatterns = [
    url(r'^new/$',views.CreateColorSetView.as_view(),name='new_color'),
    url(r'delete/(?P<pk>\d+)/$',views.DeletePost.as_view(),name='delete'),
]

管理员面板网址.py地址:

from django.conf.urls import url
from adminpanel import views

app_name = 'adminpanel'

urlpatterns = [
    url(r'^widgets/',views.SettingsListView.as_view(),name='widgets'),
    url(r'^new/$',views.CreateWidgetView.as_view(),name='create-widget'),
    url(r'^delete/$',views.DeleteWidget.as_view(),name='delete-widgets'),
]

Adminpanel应用程序视图.py地址:

from django.shortcuts import render
from adminpanel.forms import WidgetForm
from adminpanel.models import Widget
from django.utils import timezone

from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse,reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from braces.views import SelectRelatedMixin
from django.views.generic import (TemplateView,ListView,
                                    DetailView,CreateView,
                                    UpdateView,DeleteView)

# Create your views here.
class CreateWidgetView(LoginRequiredMixin,CreateView):
    login_url = '/login/'
    redirect_field_name = 'index.html'
    form_class = WidgetForm
    model = Widget

    def form_valid(self,form):
        self.object = form.save(commit=False)
        self.object.save()
        return super().form_valid(form)

    def get_success_url(self):
        return reverse('adminpanel:widgets')

class SettingsListView(ListView):
    model = Widget
    ordering = ['widget_order']

class DeleteWidget(LoginRequiredMixin,SelectRelatedMixin,DeleteView):
    model = Widget
    select_related = ('Widget',)
    success_url = reverse_lazy('settings')

    def get_queryset(self):
        queryset = super().get_query()
        return queryset.filter(user_id=self.request.user.id)

    def delete(self):
        return super().delete(*args,**kwargs)

颜色集应用程序视图.py地址:

from django.shortcuts import render
from colorsets.forms import ColorForm
from colorsets import models
from colorsets.models import ColorSet
from django.utils import timezone

from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse,reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from braces.views import SelectRelatedMixin
from django.views.generic import (TemplateView,ListView,
                                    DetailView,CreateView,
                                    UpdateView,DeleteView)

# Create your views here.
#def index(request):
#   return render(request,'index.html')

class PostListView(ListView):
    model = ColorSet

    def get_queryset(self):
        return ColorSet.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')

class CreateColorSetView(LoginRequiredMixin,CreateView):
    login_url = '/login/'
    redirect_field_name = 'index.html'
    form_class = ColorForm
    model = ColorSet

    def form_valid(self,form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return super().form_valid(form)

class DeletePost(LoginRequiredMixin,SelectRelatedMixin,DeleteView):
    model = models.ColorSet
    select_related = ('user',)
    success_url = reverse_lazy('index')

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(user_id=self.request.user.id)

    def delete(self,*args,**kwargs):
        return super().delete(*args,**kwargs)

你知道吗索引.html地址:

{% extends "base.html" %}

{% block content %}

<div class="container">
    {% include "adminpanel/widget_list" %}
    <div class="sidebar">

    </div>

    <div class="content">
    {% for colorset in colorset_list %}
            <div class="colorset-info">
                <h3 class="set-name">{{ colorset.name }}</h3>
                    <p class="author accent-text">Author: {{ colorset.user }}</p>

                    {% if user.is_authenticated and colorset.user == user %}
                        <a class="auth-user-options" href="{% url 'colorsets:delete' pk=colorset.pk %}">Delete</a>
                    {% endif %}
            </div>
            <table class="colorset">
                <tr>
                    <td class="color" style="background-color:#{{ colorset.color_one }}">
                    </td>
                    <td class="color" style="background-color:#{{ colorset.color_two }}">
                    </td>
                    <td class="color" style="background-color:#{{ colorset.color_three }}">
                    </td>
                    <td class="color" style="background-color:#{{ colorset.color_four }}">
                    </td>
                    <td class="color" style="background-color:#{{ colorset.color_five }}">
                    </td>
                </tr>
                <tr>
                    <td>
                        <p>#{{ colorset.color_one }}</p>
                    </td>
                    <td>
                        <p>#{{ colorset.color_two }}</p>
                    </td>
                    <td>
                        <p>#{{ colorset.color_three }}</p>
                    </td>
                    <td>
                        <p>#{{ colorset.color_four }}</p>
                    </td>
                    <td>
                        <p>#{{ colorset.color_five }}</p>
                    </td>
                </tr>
            </table>
    {% endfor %}
    </div>
</div>

{% endblock %}

小工具_列表.html地址:

{% extends "base.html" %}

{% block content %}

<div class="container">
    <div class="content">
        <div class="widgets-list">
        {% for widget in widget_list %}
            <h3>{{ widget.name }}</h3>
            <h3>{{ widget.widget_order }}</h3>
            <div>
                <p>{{ widget.body }}</p>
            </div>
        {% endfor %}
        </div>
        <a class="#" href="{% url 'adminpanel:create-widget' %}">New Widget</a>
    </div>
</div>

{% endblock %}

这就是我想发生的事情索引.html: enter image description here

以下是实际发生的情况: enter image description here


Tags: djangonamefromimportselfdivformurl
1条回答
网友
1楼 · 发布于 2024-09-30 01:35:57

首先视图.py分配错误的上下文名称,只需交换它们。你知道吗

其次,如何构建模板存在问题:

那个索引.html包括widget_list(不带“.html”!)此代码定义block content的内容。已在块内容中调用。你知道吗

在我看来,您应该创建一个widget_list_inner.html,其中只包含希望在应用程序的其他部分重用的代码。你知道吗

新的widget_list.html

{% extends "base.html" %}

{% block content %}

<div class="container">
    <div class="content">
        {% include "adminpanel/widget_list_inner.html" %}
        <a class="#" href="{% url 'adminpanel:create-widget' %}">New Widget</a>
    </div>
</div>

{% endblock %}

小工具列表_内部.html你知道吗

  <div class="widgets-list">
    {% for widget in widget_list %}
        <h3>{{ widget.name }}</h3>
        <h3>{{ widget.widget_order }}</h3>
        <div>
           <p>{{ widget.body }}</p>
        </div>
    {% endfor %}
  </div>

现在你可以在你的索引.html世界上任何地方的widget_list_inner索引.html你知道吗

把同样的东西涂在颜色上_设置.html. 是的,将代码从index.html中移出。看看include的文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#include

如您所见,您可以将上下文值传递给include,这有助于在应用程序的任何地方重用*_inner.html模板。你知道吗

相关问题 更多 >

    热门问题