У меня есть приложение Django. На боковой панели у меня есть навигационная ссылка, ведущая к списку отчетов. Чтобы получить правильный список отчетов, этой ссылке нужен идентификатор.
Элемент [*] в base.html, который ссылается на страницу ga_reports, находится ниже. Для правильного разрешения этой ссылки требуется app_config.id. Для этого элемента {{ app_config.id }} не существует, поскольку {{ app_config }} не существует. Добавлю, что на странице «Отчеты» эта ссылка работает при создании {{ app_config }}.
Почему {{ app_config }} существует на странице «Отчеты», но не существует на родительской странице?
Reports
Это записи из base/urls.py
path('app_config', app_config_views.app_config, name='app_config'),
...
path('ga_reports/', ga_views.ga_reports, name='ga_reports'),
Модель AppConfiguration включена в base/views.py
from .models import AppConfiguration
Это base/ga_views.py
@login_required
def ga_reports(request, app_config_id):
app_config = AppConfiguration.objects.filter(id = app_config_id).first()
if not app_config:
messages.error(request, "Invalid Configuration")
return redirect('app_config')
return render(request, 'base/ga_reports.html', {'app_config': app_config})
Это app_config_views.py.
@login_required
def app_config(request):
app_configs = []
for app_type in APP_TYPE:
app_type_subscription = UserSubscription.objects.filter(user_id = request.user.id, app_type = app_type[0], is_active = True, is_expired = False).first()
app_configuration = AppConfiguration.objects.filter(user_id = request.user.id, app_type = app_type[0], is_deleted = False, is_verified = True).first()
is_subscribed = True if app_type_subscription else False #add more configurations?
if app_configuration and is_subscribed:
app_configuration.is_active = True
app_configuration.save()
print("Done")
is_app_configured = True if (is_subscribed and app_configuration) or (not is_subscribed) else False
cancel_subscription_url = app_type_subscription.cancel_url if is_subscribed and app_type_subscription else ''
app_configs.append({
'app_type_k': app_type[0],
'app_type_v': app_type[1],
'app_type_subscription': app_type_subscription,
'app_configuration': app_configuration,
'is_subscribed': is_subscribed,
'is_app_configured': is_app_configured,
'cancel_subscription_url': cancel_subscription_url
})
app_config_id = 0
content = {
'app_config_id': app_config_id,
'app_configs': app_configs
}
app_config = None
if app_config_id != 0:
app_config = AppConfiguration.objects.filter(id = app_config_id).first()
if not app_config:
messages.error(request, "Invalid Configuration")
return redirect('app_config')
content.update({"app_config": app_config})
if request.method == 'POST':
form = AppConfigurationForm(data=request.POST, instance=app_config)
if form.is_valid():
app_config = form.save(commit=False)
app_config.user_id = request.user.id
app_config.is_active = True
app_config.save()
if app_config_id != 0:
messages.success(request, "Configuration Updated!")
else:
messages.success(request, "Configuration Added!")
return redirect('app_config')
else:
for field_name, error_list in json.loads(form.errors.as_json()).items():
error_message = error_list[0]["message"]
error_message = error_message.replace('This field', f'This field ({field_name})')
content.update({f'{field_name}_error': True})
messages.error(request, error_message)
return render(request, 'base/app_configurations.html', content)
Подробнее здесь: https://stackoverflow.com/questions/790 ... namic-link