技术到AJAX-ify这个Django应用程序

时间:2012-10-06 17:07:58

标签: python ajax django

我一直在尝试开发一个用于处理条形标签的django应用程序...到目前为止,我可以添加标签,向标签添加产品,以及从标签中删除产品。现在,我想在选项卡中添加/删除产品时使用AJAX,我不知道是否需要使用表单...这是我到目前为止所拥有的:

models.py

class Product(models.Model):
  name = models.CharField(max_length='70')
  price = models.FloatField()
  def __unicode__(self):
    return self.name

class Tab(models.Model):
  number = models.IntegerField()
  name = models.CharField(max_length='50')
  tabdate = models.DateTimeField('date created')
  consumed = models.ManyToManyField(Product, through='ConsumedRelation')
  def __unicode__(self):
    return self.name

class ConsumedRelation(models.Model):
  tab = models.ForeignKey(Tab)
  product = models.ForeignKey(Product)
  count = models.PositiveIntegerField(blank=True, null=True, default=1)
  def __unicode__(self):
    return str(self.product)

views.py

def addproduct(request, number, product):
  tab = Tab.objects.get(number=number)
  product = Product.objects.get(id=product)
  add = ConsumedRelation.objects.create(product=product, tab=tab, count=1)
  add.save()
  context = {'tab': tab, 'product': product}
  return render_to_response('addproduct.html', context)

def deleteproduct(request, number, consumedid):
  tab = Tab.objects.get(number=number)
  ConsumedRelation.objects.filter(id=consumedid).delete()
  context = {'tab': tab}
  return render_to_response('deleteproduct.html', context)

urls.py

url(r'^tabs/(?P<number>[0-9].*)/delete/(?P<consumedid>[0-9].*)/$', 'barcomandas.views.deleteproduct'),
url(r'^tabs/(?P<number>[0-9].*)/add/(?P<product>[0-9].*)/$', 'barcomandas.views.addproduct'),

singletab.html

<h1>{{ tab.name }} | {{ tab.number }}</h1>
<h2>Consumed</h2>
{% for consumed in consumedlist %}
<a href="delete/{{ consumed.id }}">X</a>{{ consumed }}<br/>
{% endfor %}

<div id="addproducts">
{% for product in productlist %}
<li><a href="add/{{ product.id }}">{{ product.name }}</a></li>
{% endfor %}
</div>

addproduct.html

{{ product }} added to tab {{ tab.name }}

所以例如,当我添加一些产品时,我有一个无用的页面“产品添加到选项卡”,因为没有一些html页面我不能这样做,所以我可以使用视图。那有意义吗? 但我不想把它作为一个表格,因为这将用于7英寸的平板电脑,我会为每个产品都有合适尺寸的按钮,因为我工作的酒吧有时可能非常繁忙,所以我需要那种速度。

理想情况下,我会在所有内容上都有ajax,左侧是当前打开标签的列表,右栏是标签编辑,包括添加产品,关闭标签等的选项。 所以我想要的是,singletab.html中有产品列表,每个产品旁边都有一个“X”。您单击X,产品淡出,列表和其他所有内容都会更新,而无需重新加载页面。

你们有没有看到任何解决方案?抱歉我的英语,而不是我的主要语言。

PS: 这也是我的第一个django应用程序,所以我很抱歉任何愚蠢的错误.. 一个简单的jquery例如(/ tabnumber / add / product)是否足够?我将如何实现它?

1 个答案:

答案 0 :(得分:0)

对不起,除了以下几行之外我没有理解你的问题。

  

有singletab.html中的产品列表,每个产品旁边都有一个“X”。您单击X,产品淡出,列表和其他所有内容都会更新,而无需重新加载页面。

我认为您可以尝试使用JQuery。它的Javascript库使事件处理和页面的使用变得更容易。

对于淡出示例,您可以看到w3 example which is good place to start learning about JQuery.,您也可以参考Ajax with JQuery了解如何在JQuery中使用Ajax。

希望它可以帮助你或让你领先一步。祝你好运: - )