簡體   English   中英

Django 'str' object 沒有屬性 'field' 上下文

[英]Django 'str' object has no attribute 'field' context

我有一個問題,我收到了這個錯誤:'str' object has no attribute 'field'

這是我的看法:

from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from .models import Company
from .forms import NewCompanyForm

# Sociétés
def companies_index(request):
    companies_list = Company.objects.order_by('-id')
    context = {
        "companies_index": "active",
        'companies_list': companies_list,
    }
    return render(request, 'companies/index.html', context)

def companies_create(request):
    context = {
        "companies_create": "active",
    }
    if request.method == 'POST':
        form = NewCompanyForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('companies_index')
    form = NewCompanyForm()

    return render(request,'companies/create.html',context,{'form': form})

def companies_delete(request, pk):
    company = get_object_or_404(Company, pk=pk)
    company.delete()
    return redirect('companies_index')

問題在於“創建”操作,我想知道如何將上下文變量和表單變量傳遞給我的模板。

此致。

謝謝。

嘗試以下

return render(request,'companies/create.html',{'context':context, 'form': form})

render 的第三個參數是一個字典,所以你想發送到模板的任何東西都應該打包在字典中。 這將解決您的問題。

這是關於渲染方法

渲染(請求,模板名稱,上下文=無)

語境

要添加到模板上下文的值字典。 默認情況下,這是一個空字典。 如果字典中的值是可調用的,視圖將在渲染模板之前調用它。

參考: https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/#render


一種解決方案可能是:

def companies_create(request):
    payload = dict()
    payload['context'] = {
        "companies_create": "active",
    }
    if request.method == 'POST':
        payload['form'] = NewCompanyForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('companies_index')
    form = NewCompanyForm()

    return render(request,'companies/create.html', payload)

請注意,有效負載是您為位置參數context提供的字典。

現在您可以毫無問題地將任意數量的上下文變量傳遞給模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM