嗨!每次我单击模板中的check_tier_level
链接时,都会加载错误的模板和视图。
输入该参数后,即使我的链接转到special_message
的视图,它也会以“ check_tier_level” 作为check_tier_level
加载主视图。如果我单击任何一个表单按钮以授予访问权限,则该位置将显示正确的消息。我只是无法检查水平。
仅当我从urlpattern和视图中删除special_message
参数时,该应用程序才能正常运行并呈现正确的模板/视图。
我对此的唯一建议是,浏览器中的url也将看起来像http://127.0.0.1:8000/tiered_access_app/Tier 1 granted!/
,而不是用%20
等来使字符转义。
我想保留该参数的全部原因是,special_message
可以根据用户的操作通知用户最新的更新。如果有人知道一种更好的方法,而又无需创建一个全新的视图/模板 (我知道这是一个解决方案,以及如何做到) ,我想知道如何。无论如何,这是我的代码:
path('', views.home, name='home'),
path('<str:special_message>/', views.home, name='home_special_message'),
path('check_tier_level/', views.check_tier_level, name='check_tier_level'),
path('check_tier_level/gain_access/', views.gain_access, name='gain_access'),
def home(request, special_message=None):
return render(request, 'tiered_access_app/home.html', {'special_message': special_message})
def check_tier_level(request):
current_user = request.user
try:
find_user = TieredAppCustomUser.objects.get(user=current_user)
if find_user.tier_choice == 'tier1':
return render(request, 'tiered_access_app/check_tier_level.html', {'level_1': 'You have access to level 1.'})
# and so on with other levels...
except ObjectDoesNotExist:
pass
return render(request, 'tiered_access_app/check_tier_level.html', {'no_access': 'You don\'t have access to the content here yet.'})
{% if special_message %}
<h2>{{ special_message }}</h2>
{% endif %}
<form action="{% url 'tiered_access_app:gain_access' %}" method="POST">
{% csrf_token %}
<label>Check level 1 access</label>
<!-- *******PROBLEM WITH LINK HERE******** -->
<p><a href="{% url 'tiered_access_app:check_tier_level' %}">Try to access level 1 first.</a> You won't be allowed unless you gain access first, by clicking the button below.</p>
<!-- *******PROBLEM WITH LINK HERE******** -->
<input type="hidden" value='1' name="tier_level">
<input type="submit" value="Enable level 1">
</form>
答案 0 :(得分:0)
我要做的就是将网址格式更改为以下顺序:
path('', views.home, name='home'),
path('check_tier_level/', views.check_tier_level, name='check_tier_level'),
path('check_tier_level/gain_access/', views.gain_access, name='gain_access'),
path('<str:special_message>/', views.home, name='home_special_message'),
这里和我下面的唯一区别是转到home
的第二个函数的位置。如果有人遇到同样的问题,我将不提这个问题。我不知道为什么这可以使它起作用,但是确实可以。现在一切正常。