我正在尝试在我的索引页上显示来自两个不同应用程序的内容,其中有两个不同的视图。你知道吗
我做了一个视图.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 %}
首先视图.py分配错误的上下文名称,只需交换它们。你知道吗
其次,如何构建模板存在问题:
那个索引.html包括
widget_list
(不带“.html”!)此代码定义block content
的内容。已在块内容中调用。你知道吗在我看来,您应该创建一个
widget_list_inner.html
,其中只包含希望在应用程序的其他部分重用的代码。你知道吗新的
widget_list.html
小工具列表_内部.html你知道吗
现在你可以在你的索引.html世界上任何地方的
widget_list_inner
索引.html你知道吗把同样的东西涂在颜色上_设置.html. 是的,将代码从
index.html
中移出。看看include的文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#include如您所见,您可以将上下文值传递给include,这有助于在应用程序的任何地方重用
*_inner.html
模板。你知道吗相关问题 更多 >
编程相关推荐