2011-07-29 4 views
0

필자는 작성한 수식에서 변수를 반환하기 위해 templatetag를 사용하고 있습니다. 나는 왜 내가이 추적을 얻고 있는지 알아 내려고 노력해왔다. 나는 수식을 쉘에서 테스트했으며 모두 제대로 작동하고 있습니다. 태그와 뷰에서 일부 인쇄 문을 수행했습니다. 그러나 이것에 대한 이유를 알아낼 수는 없습니다.+ : 'int'및 'unicode'에 대해 지원되지 않는 피연산자 유형

추적 :

Traceback: 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response 
    117.        response = middleware_method(request, e) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/urbanrunic/developement/levelend/levelend/levelend/configs/common/../../apps/common/utils/decorators.py" in wrapper 
    65.       context_instance=RequestContext(request), mimetype=mimetype) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/shortcuts/__init__.py" in render_to_response 
    20.  return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/loader.py" in render_to_string 
    188.   return t.render(context_instance) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    123.    return self._render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in _render 
    117.   return self.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/loader_tags.py" in render 
    127.   return compiled_parent._render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in _render 
    117.   return self.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/loader_tags.py" in render 
    127.   return compiled_parent._render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in _render 
    117.   return self.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django_static/templatetags/django_static.py" in render 
    108.   code = self.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/loader_tags.py" in render 
    64.    result = block.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/loader_tags.py" in render 
    64.    result = block.nodelist.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/defaulttags.py" in render 
    311.    return self.nodelist_true.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/debug.py" in render_node 
    73.    result = node.render(context) 
File "/Users/urbanrunic/.virtualenvs/levelend/lib/python2.6/site-packages/django/template/defaulttags.py" in render 
    227.     nodelist.append(node.render(context)) 
File "/Users/urbanrunic/developement/levelend/levelend/levelend/configs/common/../../apps/lender/templatetags/lender_tags.py" in render 
    15.   context[self.min] = monthlyPayment(self.how_much, self.apr_min, self.max_repayment_length) 
File "/Users/urbanrunic/developement/levelend/levelend/levelend/configs/common/../../apps/lender/utils.py" in monthlyPayment 
    34.  M = P/((1 - 1/(1 + mi) ** n)/mi) 

Exception Type: TemplateSyntaxError at /results/ 
Exception Value: Caught TypeError while rendering: unsupported operand type(s) for +: 'int' and 'unicode' 

FORMULA :

def monthlyPayment(P, mi, n): 
    """ returns monthly payment """ 
    M = P/((1 - 1/(1 + mi) ** n)/mi) 
    return M 

TAG :

class MinMonthlyPaymentsNode(Node): 
    def __init__(self, how_much, apr_min, max_repayment_length, min): 
     self.how_much, self.apr_min, self.max_repayment_length, self.min = how_much, apr_min, max_repayment_length, min 

    def render(self, context): 
     context[self.min] = monthlyPayment(self.how_much, self.apr_min, self.max_repayment_length) 
     return '' 

def do_monthly_payment(parser, token): 
    """ 
    returns a monthly payment based on the formula with interst and amount of loan 

    Example usage: 
    {% min_monthly_payments how_much, apr_min, max_repayment_length as [min]%} 
    """ 
    args = token.contents.split() 
    if len(args) != 6: 
     raise TemplateSyntaxError, "min_monthly_payments tag takes exactly six arguments" 
    if args[4] != 'as': 
     raise TemplateSyntaxError, "fourth argument to the min_monthly_payments tag must be 'as'" 

    return MinMonthlyPaymentsNode(args[1], args[2], args[3], args[5]) 

register.tag('min_monthly_payments', do_monthly_payment) 

M ODELS :

class Lender(TitleAndSlugModel): 
    """ 
    A lender 
    """ 

    DISBURSED_TYPES = get_namedtuple_choices('DISBURSED_TYPES', (
     (0, 'DIRECT_TO_SCHOOL', 'Directly to School'), 
     (1, 'SENT_TO_YOU', 'Sent to You'), 
    )) 
    SUITABILITY_TYPES = get_namedtuple_choices('SUITABILITY_TYPES', (
     (0, 'UNDERGRADUATE', 'Undergraduate'), 
     (1, 'GRADUATE', 'Graduate'), 
     (2, 'LAW', 'Law'), 
     (3, 'MEDICAL', 'Medical'), 
     (4, 'PARENTS', 'Parents'), 
    )) 

    # Financial summary 
    apr_min = models.DecimalField(max_digits=5, decimal_places=2) 
    apr_max = models.DecimalField(max_digits=5, decimal_places=2) 

    # Borrower rewards 
    auto_debit_discount = models.DecimalField(max_digits=5, decimal_places=2) 
    auto_debit_discount_note = models.CharField(max_length=250, null=True, blank=True) 
    additional_rewards_1 = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) 
    additional_rewards_1_note = models.CharField(max_length=250, null=True, blank=True) 
    additional_rewards_2 = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) 
    additional_rewards_2_note = models.CharField(max_length=250, null=True, blank=True) 

    # General info 
    loan_name = models.CharField(max_length=250) 
    loan_services_by = models.CharField(max_length=250) 
    funds_disbursed = models.PositiveIntegerField(choices=DISBURSED_TYPES.get_choices(), default=0) 
    co_signer_release_available = models.IntegerField(null=True, blank=True, help_text="Please enter in months") 
    suitable_for = MultiSelectField(max_length=50, choices=SUITABILITY_TYPES.get_choices()) 
    external_url = models.URLField(max_length=250) 
    lender_logo = FileBrowseField("Image", max_length=200, directory="uploads/", extensions=[".jpg"], blank=True, null=True) 
    schools = models.ManyToManyField(School) 

    # Repayment 
    max_repayment_length = models.IntegerField(null=True, blank=True, help_text="Please enter in years") 
    max_deferral_length = models.IntegerField(null=True, blank=True, help_text="Enter as X months after graduation") 

    # Rates 
    interest_rate_index = models.DecimalField(max_digits=5, decimal_places=2) 
    interest_rate_index_note = models.CharField(max_length=250, null=True, blank=True) 
    min_repayment_rate = models.DecimalField(max_digits=5, decimal_places=2) 
    min_repayment_rate_note = models.CharField(max_length=250, null=True, blank=True) 
    max_repayment_rate = models.DecimalField(max_digits=5, decimal_places=2) 
    max_repayment_rate_note = models.CharField(max_length=250, null=True, blank=True) 

    # Fees 
    origination_fee = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) 
    guarantee_fee = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) 

    # Notes 
    notes = models.TextField(null=True, blank=True) 

    def get_absolute_url(self): 
     return reverse("results_detail", args=[self.slug]) 

    def __unicode__(self): 
     return "%s" % (self.title) 

가 다시 어떤 도움이 크게는 올바른 방향으로 지점의 경우에도 이해 될 것이다. 고맙습니다!

+4

질문이 역 추적에 관한 것이라면 역 추적을 포함하십시오. –

+0

실제 추적을 포함하도록 질문을 편집 할 수 있습니까? – SingleNegationElimination

+0

죄송합니다. 추가 된 추적 목록을 편집했습니다. – tjoenz

답변

1

역 추적이 수식의 '마일'매개 변수가 아니라 숫자보다 유니 코드 문자열이라고 제안에 위의 라인을 대체 할 것이다 (정수 또는 부동 소수점). 장고를 말할 수는 없지만 token.contents.split()은 변환해야하는 문자열의 목록을 반환합니다. monthlyPayment 함수에서 몇 가지 디버그 인쇄물을 직접 추가하여 확인할 수 있습니다.

1

보통 args은 문자열 배열이며, 문자열 값을 원하는 위치로 전달합니다.

return MinMonthlyPaymentsNode(args[1], args[2], args[3], args[5]) 

다음은 파이썬이 자동으로 변환하지 않기 때문에 작동하지 않습니다. 이러한 모든 인수는 부동 소수점 숫자로되어있는 경우, 나는

return MinMonthlyPaymentsNode(float(args[1]), float(args[2]), float(args[3]), float(args[5])) 
+0

덕분에, 나는이 시도하지만,이 역 추적 가지고 : 파일 "/Users/urbanrunic/developement/levelend/levelend/levelend/configs/common/../../apps/lender/templatetags/lender_tags.py"do_monthly_payment의를 31. return MinMonthlyPaymentsNode (float (args [1]), float (args [2]), float (args [3]), float (args [5])) 예외 유형 : ValueError at/results/ 예외 값 : float()에 대한 유효하지 않은 리터럴 : how_much, – tjoenz

관련 문제