Python 将一个应用程序中的Django模板包含在另一个应用程序模板中
我试图包括一个模板,显示用户的个人资料上的用户帖子。我已经使用了一个包含标签,但是帖子没有显示在用户的个人资料上。但是,它可以在主页上工作,主页被设置为该应用程序的PostListViewPython 将一个应用程序中的Django模板包含在另一个应用程序模板中,python,django,Python,Django,我试图包括一个模板,显示用户的个人资料上的用户帖子。我已经使用了一个包含标签,但是帖子没有显示在用户的个人资料上。但是,它可以在主页上工作,主页被设置为该应用程序的PostListView userprofile\u detail.html中的包含标记: <div class="content-right"> {% include 'feed/userpost_list_inner.html' %} </div> {% for post in userpost_
userprofile\u detail.html
中的包含标记:
<div class="content-right">
{% include 'feed/userpost_list_inner.html' %}
</div>
{% for post in userpost_list %}
<div class="post">
<h2 class="post-title">{{ userpost.post.title }}</h2>
<p class="accent">{{ post.author }}</p>
<p class="accent">{{ post.post_date }}</p>
<p class="body">{{ post.post_body }}</p>
</div>
{% endfor %}
我没有收到任何错误,但是帖子没有显示在用户的个人资料页面上
编辑:这是我的订阅源应用程序views.py:
from django.shortcuts import render,get_object_or_404,redirect
from django.utils import timezone
from feed.models import UserPost,UserComment
from feed.forms import PostForm,CommentForm
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from braces.views import SelectRelatedMixin
from django.views.generic import (TemplateView,ListView,
DetailView,CreateView,
UpdateView,DeleteView)
User = get_user_model()
# Create your views here.
##Posts Views
class HomeView(LoginRequiredMixin,ListView):
login_url = 'login'
model = UserPost
ordering = ['-post_date']
class CreatePostView(LoginRequiredMixin,CreateView):
login_url = 'login'
redirect_field_name = '/userpost_list.html'
model = UserPost
def form_valid(self,form):
form.instance.author = self.request.user
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super(CreatePostView, self).form_valid(form)
class UpdatePostView(LoginRequiredMixin,UpdateView):
login_url = 'login'
redirect_field_name = '/userpost_detail.html'
form_class = PostForm
model = UserPost
class DeletePostView(LoginRequiredMixin,DeleteView):
model = UserPost
select_related = ('user',)
success_url = reverse_lazy('userpost_list')
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)
##Comments Views
def add_comment_to_post(request,pk):
post = get_object_or_404(UserPost,pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.save()
return redirect('userpost_list',pk=userpost.pk)
else:
form = CommentForm()
return render(request,'feed/userpost_list.html',{'form':form})
from django.shortcuts import render
from users.forms import UserForm,UserProfileForm
from users.models import UserProfileInfo
from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import (TemplateView,ListView,
DetailView,CreateView,
UpdateView,DeleteView)
# Create your views here.
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username,password=password)
if user:
if user.is_active:
login(request,user)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Account now active")
else:
print("Login Unsuccessful")
return HttpResponse("Username and/or password are not correct")
else:
return render(request,'login.html',{})
def register(request):
registered = False
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
registered = True
else:
print(user_form.errors,profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render(request,'register.html',{
'user_form':user_form,
'profile_form':profile_form,
'registered':registered
})
@login_required
def user_logout(request):
logout(request)
return HttpResponseRedirect(reverse('index'))
class UserListView(ListView):
model = UserProfileInfo
ordering = ['-join_date']
class UserProfileView(DetailView):
model = UserProfileInfo
class UserEditProfileView(LoginRequiredMixin,UpdateView):
login_url = '/login/'
redirect_field_name = '/users_detail.html'
form_class = UserProfileForm
model = UserProfileInfo
以下是我的用户app views.py:
from django.shortcuts import render,get_object_or_404,redirect
from django.utils import timezone
from feed.models import UserPost,UserComment
from feed.forms import PostForm,CommentForm
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from braces.views import SelectRelatedMixin
from django.views.generic import (TemplateView,ListView,
DetailView,CreateView,
UpdateView,DeleteView)
User = get_user_model()
# Create your views here.
##Posts Views
class HomeView(LoginRequiredMixin,ListView):
login_url = 'login'
model = UserPost
ordering = ['-post_date']
class CreatePostView(LoginRequiredMixin,CreateView):
login_url = 'login'
redirect_field_name = '/userpost_list.html'
model = UserPost
def form_valid(self,form):
form.instance.author = self.request.user
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super(CreatePostView, self).form_valid(form)
class UpdatePostView(LoginRequiredMixin,UpdateView):
login_url = 'login'
redirect_field_name = '/userpost_detail.html'
form_class = PostForm
model = UserPost
class DeletePostView(LoginRequiredMixin,DeleteView):
model = UserPost
select_related = ('user',)
success_url = reverse_lazy('userpost_list')
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)
##Comments Views
def add_comment_to_post(request,pk):
post = get_object_or_404(UserPost,pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.save()
return redirect('userpost_list',pk=userpost.pk)
else:
form = CommentForm()
return render(request,'feed/userpost_list.html',{'form':form})
from django.shortcuts import render
from users.forms import UserForm,UserProfileForm
from users.models import UserProfileInfo
from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import (TemplateView,ListView,
DetailView,CreateView,
UpdateView,DeleteView)
# Create your views here.
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username,password=password)
if user:
if user.is_active:
login(request,user)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Account now active")
else:
print("Login Unsuccessful")
return HttpResponse("Username and/or password are not correct")
else:
return render(request,'login.html',{})
def register(request):
registered = False
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
registered = True
else:
print(user_form.errors,profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render(request,'register.html',{
'user_form':user_form,
'profile_form':profile_form,
'registered':registered
})
@login_required
def user_logout(request):
logout(request)
return HttpResponseRedirect(reverse('index'))
class UserListView(ListView):
model = UserProfileInfo
ordering = ['-join_date']
class UserProfileView(DetailView):
model = UserProfileInfo
class UserEditProfileView(LoginRequiredMixin,UpdateView):
login_url = '/login/'
redirect_field_name = '/users_detail.html'
form_class = UserProfileForm
model = UserProfileInfo
订阅源应用程序型号:
from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings
from django.contrib.auth import get_user_model
User = get_user_model()
# Create your models here.
class UserPost(models.Model):
author = models.ForeignKey(User,related_name='userpost',null=True)
post_date = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=150,blank=False)
post_body = models.TextField(max_length=1000,blank=False)
def publish(self):
self.save()
def get_absolute_url(self):
return reverse('index')
def __str__(self):
return self.title
class UserComment(models.Model):
post = models.ForeignKey('feed.UserPost',related_name='comments')
author = models.ForeignKey(User,related_name='usercomment')
comment_date = models.DateTimeField(auto_now_add=True)
comment_body = models.TextField(max_length=500)
def publish(self):
self.save()
def get_absolute_url(self):
return reverse("userpost_list")
def __str__(self):
return self.text
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from users.choices import *
# Create your models here.
class UserProfileInfo(models.Model):
user = models.OneToOneField(User)
join_date = models.DateTimeField(default=timezone.now)
profile_pic = models.ImageField(upload_to='profile_pics',blank=True)
location = models.CharField(max_length=150)
title = models.CharField(max_length=250)
user_type = models.IntegerField(choices=USER_TYPE_CHOICES,default=1)
website = models.URLField(max_length=100,blank=True)
about = models.TextField(max_length=500,default='about')
twitter = models.CharField(max_length=50,blank=True)
dribbble = models.CharField(max_length=50,blank=True)
github = models.CharField(max_length=50,blank=True)
def __str__(self):
return self.user.username
用户应用程序型号:
from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings
from django.contrib.auth import get_user_model
User = get_user_model()
# Create your models here.
class UserPost(models.Model):
author = models.ForeignKey(User,related_name='userpost',null=True)
post_date = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=150,blank=False)
post_body = models.TextField(max_length=1000,blank=False)
def publish(self):
self.save()
def get_absolute_url(self):
return reverse('index')
def __str__(self):
return self.title
class UserComment(models.Model):
post = models.ForeignKey('feed.UserPost',related_name='comments')
author = models.ForeignKey(User,related_name='usercomment')
comment_date = models.DateTimeField(auto_now_add=True)
comment_body = models.TextField(max_length=500)
def publish(self):
self.save()
def get_absolute_url(self):
return reverse("userpost_list")
def __str__(self):
return self.text
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from users.choices import *
# Create your models here.
class UserProfileInfo(models.Model):
user = models.OneToOneField(User)
join_date = models.DateTimeField(default=timezone.now)
profile_pic = models.ImageField(upload_to='profile_pics',blank=True)
location = models.CharField(max_length=150)
title = models.CharField(max_length=250)
user_type = models.IntegerField(choices=USER_TYPE_CHOICES,default=1)
website = models.URLField(max_length=100,blank=True)
about = models.TextField(max_length=500,default='about')
twitter = models.CharField(max_length=50,blank=True)
dribbble = models.CharField(max_length=50,blank=True)
github = models.CharField(max_length=50,blank=True)
def __str__(self):
return self.user.username
用户应用程序URL:
from django.conf.urls import url
from users import views
app_name = 'users'
urlpatterns = [
url(r'^$',views.UserListView.as_view(),name='user_list'),
url(r'^(?P<pk>\d+)/$',views.UserProfileView.as_view(),name='user_profile'),
url(r'^(?P<pk>\d+)/edit$',views.UserEditProfileView.as_view(),name='user-profile-edit'),
url(r'^login/$',views.user_login,name='user_login'),
url(r'^logout/$',views.user_logout,name='user_logout',kwargs={'next_page':'/'}),
url(r'^register/$',views.register,name='register'),
]
from django.conf.urls import url
from feed import views
app_name = 'feed'
urlpatterns = [
url(r'^new/$',views.CreatePostView.as_view(),name='new_post'),
url(r'^post/(?P<pk>\d+)/edit/$',views.UpdatePostView.as_view(),name='edit_post'),
url(r'^post/(?P<pk>\d+)/delete/$',views.DeletePostView.as_view(),name='delete_post'),
url(r'^post/(?P<pk>\d+)/comment/$',views.add_comment_to_post,name='add_comment_to_post'),
]
这是因为
userpost
对象在userprofile\u detail.html
中不可用。它仅在userpost\u list.html
中可用
通过使用视图将其发送到userprofile\u detail.html
使其可用,它将显示出来
from feed.models import UserPost
from .models import UserProfileInfo
from django.shortcuts import render,get_list_or_404,get_object_or_404
def userprofile(request,pk):
user = get_object_or_404(UserProfileInfo, user__id=pk)
userpost_list = UserPost.objects.filter(author__id=pk)
context={'user':user, 'userpost_list':userpost_list}
return render(request, 'yourtemplate/html', context)
现在在url.py中
url(r'^(?P<pk>\d+)/$',views.userprofile,name='user_profile'),
url(r'^(?P\d+/$),views.userprofile,name='user_profile'),
这是因为userpost
对象在userprofile\u detail.html
中不可用。它仅在userpost\u list.html
中可用
通过使用视图将其发送到userprofile\u detail.html
使其可用,它将显示出来
from feed.models import UserPost
from .models import UserProfileInfo
from django.shortcuts import render,get_list_or_404,get_object_or_404
def userprofile(request,pk):
user = get_object_or_404(UserProfileInfo, user__id=pk)
userpost_list = UserPost.objects.filter(author__id=pk)
context={'user':user, 'userpost_list':userpost_list}
return render(request, 'yourtemplate/html', context)
现在在url.py中
url(r'^(?P<pk>\d+)/$',views.userprofile,name='user_profile'),
url(r'^(?P\d+/$),views.userprofile,name='user_profile'),
等等,我该怎么做?我明白你的意思,我只是不知道如何添加你的视图.py
。只是添加了它们def get\u context\u data(self,**kwargs)下的内容:
?像这样:class UserProfileView(DetailView):model=UserProfileInfo template\u name='UserProfileInfo\u detail.html'userpost\u list=userpost.objects.filter(user\u id=user.id)context={'userpost\u list':userpost\u list}
我不知道如何更好地格式化注释代码,抱歉,等等,我该怎么做?我明白你的意思,我只是不知道如何添加你的视图.py
。只是添加了它们def get\u context\u data(self,**kwargs)下的内容:
?像这样:class UserProfileView(DetailView):model=UserProfileInfo template\u name='UserProfileInfo\u detail.html'userpost\u list=userpost.objects.filter(user\u id=user.id)context={'userpost\u list':userpost\u list}
我不知道如何更好地格式化注释代码对不起