2017-05-07 72 views
-1

我試圖在URL中傳遞slu but,但我無法這樣做。 slu is如果有一個文本的形式: - text: - 這是Stackoverflow slu:: - 這是 - stackoverflow 但我無法實現這一點。 我的模型: -如何在Django中傳遞slu 012作爲url

from __future__ import unicode_literals 

from django.db import models 


class EmailTemplates(models.Model): 
    id = models.IntegerField(db_column="id", max_length=11, help_text="") 
    subject = models.CharField(db_column="subject",max_length=255) 
    slug = models.CharField(db_column="slug",unique=True, max_length=255) 
    content = models.TextField(db_column="content", help_text="") 
    createdAt = models.DateTimeField(db_column='createdAt',auto_now=True, help_text="") 
    modifiedAt = models.DateTimeField(db_column='modifiedAt',auto_now=True, help_text="") 
    updatedBy = models.IntegerField(db_column='updatedBy', help_text="") 

    class Meta: 
     managed = False 
     db_table = 'email_templates' 

我的網址我試圖爲: -

url(r'^email/edit/(?P<email_template_id>[\w-]+)/$', email_managment.email_send, name='email-edit') 

我的看法是這樣的: -

@login_required 
@csrf_exempt 
def email_send(request,email_template_id): 
    try: 
     form = emailTemplates(request.POST or None) 
     edit_email_end = 'add' 
     email_template_obj = {} 
     if request.method == 'POST': 
      if form.is_valid(): 
       subject = request.POST.get('subject') 
       lowercase = subject.lower() 
       slug = lowercase.replace(" ","-") 
       print slug 
       content = request.POST.get('content') 
       if email_template_id is None or email_template_id == '': 
        add_email_template_entry = EmailTemplates(subject=subject, content=content,slug=slug) 
        add_email_template_entry.save(using="cms") 
        messages.success(request, 'Successfully added to the email template page') 
       elif email_template_id: 
        email_template_obj = EmailTemplates.objects.using("cms").get(id=email_template_id) 
        email_template_obj.subject = subject 
        email_template_obj.content = content 
        email_template_obj.slug = slug 
        email_template_obj.save(using="cms") 
        messages.success(request, 'Successfully update to the email templates') 
       return redirect('cms:email-list') 

     if email_template_id is not None: 
      edit_email_end = 'edit' 
      email_template_obj = EmailTemplates.objects.using("cms").get(id=email_template_id) 
     return render(request, 'templates/email_managment/add_email.html',{ 
      'edit_email_end': edit_email_end,'email_template_obj':email_template_obj}) 
    except Exception as e: 
     print e 
     raise Http404 

這是正在添加的錯誤是

invalid literal for int() with base 10: 'hello-took-of-fools'

請忽略格拉瑪如果有任何的話,就會出現錯誤 在此先感謝

+0

你是什麼意思,你無法通過slu??你怎麼試過的?你做了什麼事?你得到了什麼錯誤? –

+0

錯誤:對於int()以10爲基數的無效文字:'你好 - 傻瓜' –

+0

你需要顯示完整的回溯,所以我們知道錯誤來自哪裏。你也應該展示你的模型。 –

回答

0

因爲你不會顯示完整的錯誤,我們必須猜測發生了什麼。

有一件明顯的事情你做錯了。即使你參考你傳遞的參數爲email_template_id,它不是一個ID,它是一個slu。。但是當你查詢模型時,你可以通過ID來查詢,而不是通過slug。

在這兩個地方你做EmailTemplates.objects.get(),你應該有slug=email_template_id而不是id=...。如果你稱之爲參數,它實際上是 - 一個slu rather而不是一個ID - 這會更明顯。 (注意,你的模型表單可以用來更新一個現有的對象,也可以創建一個新的對象,如果你只是將對象作爲instance參數傳遞給你的表單實例化。那會使你首先創建一個else塊但即使你選擇不這樣做,你應該總是form.cleaned_data而不是直接從request.POST得到的數據。)