我在模板中有以下内容
<div class="profile-navbar">
{% url 'users:profile' user.id as profile_link %}
<a class="item home" href="{{ profile_link }}">Home</a>
{% url 'users:profile_ask' user.id as profile_ask_link %}
<a class="item" href="{{ profile_ask_link }}" > Ask <span class="num">0</span></a>
{% url 'users:profile_answer' user.id as profile_answer_link %}
<a class="item" href="{{ profile_answer_link }}" > Answer <span class="num">0</span></a>
</div>
网址是
url(r'^profile/(?P<userid>\d+)', views.profile, name='profile'),
url(r'^profile/ask/(?P<userid>\d+)', views.profile_ask, name='profile_ask'),
url(r'^profile/answer/(?P<userid>\d+)', views.profile_answer, name='profile_answer'),
这是视图功能:
def profile(request,userid):
if request.user.is_authenticated():
if request.user.id == userid:
pass
else:
pass
else:
pass
template_name = 'users/profile.html'
if request.method == 'POST':
pass
return render(request, template_name)
访客访问者可以访问该页面,只要他/她输入链接,但页面中的链接(上述模板)不起作用。 我在这里做错了什么? 谢谢。
答案 0 :(得分:1)
你可以采取两种方法(第二种是首选方法):
1。)
<div class="profile-navbar">
<a class="item home" href="{% url 'profile' user.id %}">Home</a>
<a class="item" href="{% url 'profile_ask' user.id %}" > Ask <span class="num">0</span></a>
<a class="item" href="{% url 'profile_answer' user.id %}" > Answer <span class="num">0</span></a>
</div>
2)。
<强> models.py:强>
# Completely making this up, but you'll get the idea
class Model(models.Model):
user = models.ForeignKey(User)
def get_profile_url(self):
return reverse('profile',
kwargs={'userid': self.user.id})
def get_profile_ask_url(self):
return reverse('profile_ask',
kwargs={'userid': self.user.id})
def get_profile_answer_url(self):
return reverse('profile_answer',
kwargs={'userid': self.user.id})
<强> HTML:强>
<a class="item home" href="{{ request.user.get_profile_url }}">Home</a>
<a class="item" href="{{ request.user.get_profile_ask_url }}"> Ask <span class="num">0</span></a>
<a class="item" href="{{ request.user.get_profile_answer_url }}"> Answer <span class="num">0</span></a>
-
第二种方法是首选,因为它现在是通用的。如果需要进行更改,则只需在模型中进行更改。如果你按照我展示的第一种方式进行设置,你需要经历每一个模板并做出改变 - 屁股上的痛苦。
我想向您展示第一种方法,以便您可以看到正在发生的事情,但我强烈建议您遵循第二种格式。
注意:我直接在响应中输入了这个,因此在使用之前请确保语法和变量正确。您还需要根据您的模型等进行更改。如果您遇到问题,请随时提出问题。
修改强>
另外,将您的网址更改为此(应使用尾部斜杠和美元符号):
# I'm assuming these are extended from a branch?
url(r'^profile/(?P<userid>\d+)/$', 'profile', name='profile'),
url(r'^profile/ask/(?P<userid>\d+)/$', 'profile_ask', name='profile_ask'),
url(r'^profile/answer/(?P<userid>\d+)/$', 'profile_answer', name='profile_answer'),
<强> views.py:强>
def profile(request, userid):
user_profile = get_object_or_404(User, id=userid)
template_name = 'users/profile.html'
if request.method == 'POST':
pass
return render(request, template_name, {'user_profile': user_profile})