我有一个函数,它给我的结果,我期待在控制台模式,但如果我尝试使用Django的功能,页面永远不会加载,只是有一个循环计算,永远不会结束。
有什么想法吗? *抱歉我的英文
控制台功能(WORK GREAT):
def sum_digitos(n):
sum = 0;
while n != 0:
sum += n % 10
n /= 10
if sum > 9:
x = str(sum)
y =list(x)
sum = int(y[0]) + int(y[1])
return sum
print sum_digitos(2461978)
Django观点:
def Calcular(request):
if request.method == 'POST':
form = NumerologiaForm(request.POST)
if form.is_valid():
sum = 0;
ano = str(request.POST['fecha_year'])
mes = str(request.POST['fecha_month'])
dia = str(request.POST['fecha_day'])
data = dia + mes + ano
fecha = int(data)
while fecha != 0:
f = fecha
sum += f % 10
f /= 10
if sum > 9:
x = str(sum)
y =list(x)
sum = int(y[0]) + int(y[1])
resultado = get_object_or_404(Numero,numero = sum)
return HttpResponseRedirect(resultado.get_absolute_url())
else:
form = NumerologiaForm()
return render_to_response('numerologiaForm.html',{'form':form})
答案 0 :(得分:4)
尝试:
f = fecha
while f!= 0:
sum += f % 10
f /= 10
if sum > 9:
x = str(sum)
y =list(x)
sum = int(y[0]) + int(y[1])
您似乎正在更改f
,但检查fecha
是否有循环。
答案 1 :(得分:2)
由于the sum of the digits is num % 9
,没有必要去做所有工作来对该数字中的数字求和。如果num % 9
为零,则实际的数字总和为9。
将您的方法更改为
def sum_digitos(n):
sum_ = n % 9
return sum_ if sum_ != 0 else 9
您将完全避免原始方法中发生的任何问题。
答案 2 :(得分:2)
Sanjay的回答是正确的,我推荐它。我只是想问你为什么不这么做:
from numerology import sum_digitos
def Calcular(request):
# In your code, you return HttpResponseRedirect using a nonexistent
# "resultado" variable if the form is not valid. This will raise an
# exception. I think you meant to indent "return Http..." one step more.
if request.method == 'POST':
form = NumerologiaForm(request.POST)
else:
form = NumerologiaForm()
# "or..." part of next line not needed if form.is_valid() returns
# False for a blank form.
if not form.is_valid() or form == NumerologiaForm():
return render_to_response('numerologiaForm.html', {'form': form})
ano = str(request.POST['fecha_year'])
mes = str(request.POST['fecha_month'])
dia = str(request.POST['fecha_day'])
resultado = get_object_or_404(Numero,
numero=sum_digitos(int(dia + mes + ano)))
return HttpResponseRedirect(resultado.get_absolute_url())
你已经在Python中有了一个工作函数......为什么不直接导入它并使用它呢?
答案 3 :(得分:0)
您没有说出您的其他环境是什么样的,但您应该使用f //= 10
来确保您执行整数除法。