我在我的Django项目中创建了一个base.html,我继承了其余的html页面。在我的base.html中,我创建了一个导航栏,显示Home,About,Contact和[Myprofile and Logout]如果用户已登录,则显示[Register]。 问题是,当我登录我的主页时,我确实看到了按钮[Myprofile],但是当我访问联系人或关于页面时,[Myprofile]导航栏按钮丢失,但[Logout]工作正常。
这是我的base.html
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<title>
{% block title %}
WEB PAGE BY SHASHANK
{% endblock title %}
</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}" />
</head>
<body>
<div id="page">
<div id="logo">
<h1><a href="/" id="logoLink">S PORTAL</a></h1>
</div>
<div id="nav">
<ul>
<li><a href="{% url 'home' %}">Home</a></li>
<li><a href="{% url 'about' %}">About</a></li>
<li><a href="{% url 'contact' %}">Contact</a></li>
{% if user.is_authenticated %}
<li><a href="{% url 'auth_logout' %}">Logout</a></li>
{% for thing in things %}
{% if user == thing.user %}
<li><a href="{% url 'thing_detail' slug=thing.slug %}">My Profile</a></li>
{% endif %}
{% endfor %}
{% else %}
<li><a href="{% url 'auth_login' %}">Login</a></li>
<li><a href="{% url 'registration_register' %}">Register</a></li>
{% endif %}
</ul>
</div>
{% block content %}{% endblock content %}
<div id="footer">
<p>
Webpage made by <a href="/" target="_blank">SHASHANK</a>
</p>
</div>
</div>
</body>
</html>
About.html
{% extends 'layouts/base.html' %}
{% block title %} ABOUT - {{ block.super }}{% endblock title %}
{% block content %}
<h1>WHAT WE DO</h1>
<div id="content">
<h2>ABOUT</h2>
<p>
We are a new software development company.
</p>
<p>We are trying to change the world and expecting to getting paid for the same</p>
<p>
Visit us on our <a href="www.facebook.com"> Facebook </a> page.
</p>
</div>
{% endblock content %}
Urls.py
from collection.backends import MyRegistrationView
from django.conf.urls import include, url
from django.contrib import admin
from collection import views
from django.views.generic import TemplateView
from django.contrib.auth.views import (
password_reset,
password_reset_done,
password_reset_confirm,
password_reset_complete
)
urlpatterns = [
url(r'^$', views.index, name='home'),
url(r'^about/$',TemplateView.as_view(template_name='about.html'),name='about'),
url(r'^contact/$',TemplateView.as_view(template_name='contact.html'),name='contact'),
url(r'^things/(?P<slug>[-\w]+)/$','collection.views.thing_detail',name='thing_detail'),
url(r'^things/(?P<slug>[-\w]+)/edit/$','collection.views.edit_thing',name='edit_thing'),
url(r'^things/(?P<slug>[-\w]+)/edit/weight$','collection.views.edit_weight',name='edit_weight'),
url(r'^things/(?P<slug>[-\w]+)/delete/weight$','collection.views.remove_weight',name='remove_weight'),
#WORKING url(r'^things/(?P<pk>\d+)/remove/$', 'collection.views.remove_weight', name='remove_weight'),
url(r'^things/$',TemplateView.as_view(template_name='weight_removed.html'),name='weight_removed'),
url(r'^(?P<slug>[\w\d-]+)/(?P<pk>\d+)/$','collection.views.remove_weight',name='remove_weight'),
#url(r'^edit/(?P<slug>\d+)/weights$', 'collection.views.AddWeight',name='AddWeight'),
# the new password reset URLs
url(r'^accounts/password/reset/$',password_reset,{'template_name':'registration/password_reset_form.html'},name="password_reset"),
url(r'^accounts/password/reset/done/$',password_reset_done,{'template_name':'registration/password_reset_done.html'},name="password_reset_done"),
url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',password_reset_confirm,{'template_name':'registration/password_reset_confirm.html'},name="password_reset_confirm"),
url(r'^accounts/password/done/$',password_reset_complete,{'template_name':'registration/password_reset_complete.html'},name="password_reset_complete"),
#setup additional registeration page
url(r'^accounts/register/$',MyRegistrationView.as_view(),name='registration_register'),
url(r'^accounts/create_thing/$','collection.views.create_thing',name='registration_create_thing'),
url(r'^accounts/',include('registration.backends.default.urls')),
url(r'^admin/', include(admin.site.urls)),
]
Views.py
from django.shortcuts import render,redirect,get_object_or_404
from collection.models import Thing, Weight
from collection.forms import ThingForm, WeightForm, ThingWeightFormSet
from django.template.defaultfilters import slugify
from django.contrib.auth.decorators import login_required
from django.http import Http404
from django.views.decorators.csrf import csrf_protect
from django.views.generic import ListView, CreateView, UpdateView
from django import forms
def index(request):
things = Thing.objects.all()
return render(request,'index.html',{'things':things,})
def thing_detail(request, slug):
# grab the object...
thingRA = Thing.objects.get(slug=slug)
weights = thingRA.weights.all().order_by('-date')
# and pass to the template
return render(request, 'things/thing_detail.html', {'thing': thingRA, 'weights':weights,})
def edit_thing(request, slug):
# grab the object
thing = Thing.objects.get(slug=slug)
# set the form we're using
form_class = ThingForm
# if we're coming to this view from a submitted form
if request.method == 'POST':
# grab the data from the submitted form and apply to
# the form
form = form_class(data=request.POST, instance=thing)
if form.is_valid():
# save the new data
form.save()
return redirect('thing_detail', slug=thing.slug)
# otherwise just create the form
else:
form = form_class(instance=thing)
# and render the template
return render(request, 'things/edit_thing.html', {'thing': thing,'form': form,})
def create_thing(request):
form_class = ThingForm
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
thing = form.save(commit=False)
thing.user = request.user
thing.slug = slugify(thing.name)
thing.save()
slug = slugify(thing.name)
return redirect('thing_detail', slug=thing.slug)
else:
form = form_class()
return render(request,'things/create_thing.html', {'form': form,})
def edit_weight(request, slug):
thing = get_object_or_404(Thing, slug=slug)
if request.method == "POST":
form = WeightForm(request.POST)
if form.is_valid():
weight = form.save(commit=False)
weight.thingRA = thing
weight.save()
return redirect('thing_detail', slug=thing.slug)
else:
form = WeightForm()
return render(request, 'things/edit_weight.html', {'form': form})
"""WORKING WEIGHT
def remove_weight(request, pk):
weight = get_object_or_404(Weight, pk=pk)
thing_pk = weight.thingRA.pk
weight.delete()
return redirect('weight_removed')
"""
def remove_weight(request, pk, slug):
weight = get_object_or_404(Weight, pk=pk)
thing = get_object_or_404(Thing, slug=slug)
thing_pk = weight.thingRA.pk
weight.delete()
return redirect('thing_detail', slug=slug)
@login_required
def edit_thing(request, slug):
# grab the object...
thing = Thing.objects.get(slug=slug)
# make sure the logged in user is the owner of the thing
if thing.user != request.user:
raise Http404
# set the form we're using...
form_class = ThingForm
# if we're coming to this view from a submitted form,
if request.method == 'POST':
# grab the data from the submitted form and
# apply to the form
form = form_class(data=request.POST, instance=thing)
if form.is_valid():
# save the new data
form.save()
return redirect('thing_detail', slug=thing.slug)
# otherwise just create the form
else:
form = form_class(instance=thing)
# and render the template
return render(request, 'things/edit_thing.html', {'thing': thing,'form': form,})
答案 0 :(得分:1)
您的个人资料取决于名为things
的上下文变量,该变量必须出现在您的主页中,但不得出现在其中。我想你每个用户只有一件事,所以你要么只需要使用它,要么采取第一个
{% for thing in things %}
{% if user == thing.user %}
<li><a href="{% url 'thing_detail' slug=thing.slug %}">My Profile</a></li>
{% endif %}
{% endfor %}
应该是以下之一:
Thing与用户有多对一的关系
<li><a href="{% url 'thing_detail' slug=user.thing_set.first.slug %}">My Profile</a></li>
Thing与用户有一对一的关系
<li><a href="{% url 'thing_detail' slug=user.thing.slug %}">My Profile</a></li>