def messageList2(request,type=None,channel=None): """ Shows a message list """ info(request, 'messageList', 'Listing messages') setLeftMenu(request, messageMenu(request), _('Messages')) crumbs = ((_('Home'), reverse('root')),) extra_context = {} if type: extra_context['typeName'] = MESSAGE_TYPES[type] typeName = MESSAGE_TYPES[type] if typeName == MESSAGE_TYPES[MESSAGE_TYPE_INDIVIDUAL]: crumbs += ((_('Individual messages'), reverse('messagelist', args = [MESSAGE_TYPE_INDIVIDUAL])),) extra_context['type'] = MESSAGE_TYPE_INDIVIDUAL elif typeName == MESSAGE_TYPES[MESSAGE_TYPE_CHANNEL]: crumbs += ((_('Channel messages'), reverse('messagelist', args = [MESSAGE_TYPE_CHANNEL])),) extra_context['type'] = MESSAGE_TYPE_CHANNEL else: error(request, 'messageList2', 'Trying to list messages of unknown type') raise Http404 if channel: extra_context['channel'] = channel extra_context['profile'] = request.session['profile'] extra_context['crumbs'] = crumbs kwargs = {'type': type, 'id': request.user.id} extra_context['filterForm'] = FilterForm(**kwargs) return render_to_response(TEMPLATES['message_list'], extra_context, RequestContext(request))
def ajax_gen_filter(request,type): """ """ info(request,"gen_ajax_filter","generate filter to message_list") if not request.is_ajax(): warning(request,"gen_ajax_filter","This view is only access in Ajax mode") raise Http404 if (request.method != 'POST'): warning(request,"gen_ajax_filter","This view is only access in POST method") raise Http404 kwargs = {'type':type, 'id':request.user.id} form = FilterForm(request.POST,**kwargs) if not form.is_valid(): return HttpResponse(simplejson.dumps({"result": False,'filter':" ", 'ajax': True, 'errors':display_form(form)})) filter = "" if type == MESSAGE_TYPE_INDIVIDUAL: for status in form.cleaned_data['status']: filter += ",status:%s" % status if form.cleaned_data['mobile'] != '': filter += ",mobile:"+form.cleaned_data['mobile'] else: filter += ",channel:%s" % form.cleaned_data['channel'] if form.cleaned_data['initDate'] != None: filter +=",creationDateSince:"+str(form.cleaned_data['initDate']).replace(' ','_').replace(':','-') if form.cleaned_data['endDate'] != None: filter +=",creationDateUntil:"+str(form.cleaned_data['endDate']).replace(' ','_').replace(':','-') if form.cleaned_data['mms'] != None: filter +=",mms:"+str(form.cleaned_data['mms']) filter = filter[1:len(filter)] info(request,"gen_ajax_filter","generate valid filter") return HttpResponse(simplejson.dumps({"result": True,'filter':filter,'ajax':True }))
def filterQs(request,type=None): info(request,"filterQs","enter in filterQs") filters = request.GET['filter'].split(',') filter = {} status = [] for f in filters: k,v = f.split(':') if k == 'creationDateSince': v = datetime.datetime.strptime(v, "%Y-%m-%d_%H-%M-%S") k = 'creationDate__gte' elif k == 'creationDateUntil': v = datetime.datetime.strptime(v, "%Y-%m-%d_%H-%M-%S") k = 'creationDate__lte' elif k == 'mms': k = 'body__mms' v = 1 if v == 'True' else 0 elif k == 'channel': k = 'channelmessage__channel__id' elif k == 'mobile': k = 'mobile__icontains' if k != 'status': filter[str(k)] = v else: status.append(int(v)) if status: filter['smshistory__server_status__in'] = status return filter
def deleteChannel(request, object_id): """ #TODO """ setLeftMenu (request, channelMenu(), _('Channels')) crumbs = ( ( _('Home') , reverse('root') ), ( _('Channel List') , reverse('showList') ), ( _('Delete Channel %(objectId)s') % {'objectId': object_id} , reverse('delete_channel',args=[object_id])), ) info (request, 'deleteChannel', 'enter to delete channel %(object)s' % {'object':object_id}) try: object = Channel.objects.get(pk = object_id) except Channel.DoesNotExist: error (request, 'deleteChannel', _('Trying to delete a unexisting channel')) object = None if request.POST: object.destructionDate = datetime.datetime.now() object.active = False object.save() info(request, 'deleteChannel', _("Channel %(object)s have been deleted" % {'object': object})) return HttpResponseRedirect(reverse('showList')) else: return render_to_response(TEMPLATES['delete_channel'], { 'object': object, 'profile' : request.session['profile'], 'crumbs' : crumbs }, RequestContext (request))
def ajax_filter(request,type=None): info(request,"ajax_filter","create queryset of message list") if not request.is_ajax(): warning(request,"ajax_filter","This view is only for ajax") raise Http404 filter = {} if (('filter' in request.GET) & (request.GET['filter'] != '')): filter = filterQs(request,type) if (checkAdmin(request.user)): if type == MESSAGE_TYPE_INDIVIDUAL: filter['mobile__isnull'] = False elif type == MESSAGE_TYPE_CHANNEL: filter['mobile__isnull'] = True qs = Message.objects.filter(**filter).order_by('-creationDate') else: if type == MESSAGE_TYPE_INDIVIDUAL: accs = Account.objects.filter(customer=Customer.objects.get(id=request.user.id)) filter['account__in'] = accs filter['mobile__isnull'] = False qs = Message.objects.filter(**filter).order_by('-creationDate') elif type == MESSAGE_TYPE_CHANNEL: chnls = Channel.objects.filter(customer=Customer.objects.get(id=request.user.id)) filter['id__in'] = [q.message.id for q in ChannelMessage.objects.filter(channel__in=chnls).order_by('channel')] qs = Message.objects.filter(**filter).order_by('-creationDate') data = {'data':qs,'type':type} return render_to_response(TEMPLATES['ajax_filter'], data, RequestContext( request ) )
def ajaxDeleteSubscriber(request): info(request,"ajaxDeleteSubscriber","Deleting subscriber") if request.is_ajax(): if "checked" in request.GET: checked = request.GET['checked'] # Check if there are marked channels if checked: list = checked.split(",") channel = Channel.objects.get(pk = request.GET['channel']) subscriber = Subscriber.objects.filter(id__in=list) if len(subscriber) == len(list): for s in subscriber: s.channels.remove(channel) if not s.channels.all().count(): s.delete() else: warning(request,"ajaxDeleteSubscriber","not filter same number of item than items in list") return HttpResponse(simplejson.dumps({'data':False,'ajax':False})) return HttpResponse(simplejson.dumps({'data':True,'ajax':False})) else: warning(request,"ajaxDeleteSubscriber","not select any subscriber to delete") return HttpResponse(simplejson.dumps({'data':False,'ajax':False})) else: warning(request,"ajaxDeleteSubscriber","this view is only access by ajax") raise Http404
def gestion_direcciones(request, id=None): rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = ((_('Home'), reverse('root')), (_('Contact address'), reverse('contacto_direcciones', args=[id])),) info(request, 'gestion_direcciones', 'Management contact address') setLeftMenu(request, contactMenu(request), _(u'Summary')) item = get_object_or_404(Contacto, pk=id) form = None if request.POST: form = item.direccion_form() form.setData(request.POST) new_form = DireccionForm(request.POST) if form.is_valid() and new_form.is_valid(): item.update_dir(form.cleaned_data) if new_form.cleaned_data['tipo']: dato = new_form.save(item) else: context['form'] = form context['new_form'] = form if not 'form' in context: context['form'] = item.direccion_form() context['new_form'] = DireccionForm() context['object'] = item context['label'] = _(u'address') return render_to_response('addressbook/gestion_datos.html', context, rc)
def editItem(request, name, id, form=None, template_name=EDIT_ITEM_TEMPLATE, delete=False): """ Edit an user item profile """ info (request, 'editItem', 'Editing an item') try: obj = getObj(request, name, id) except Http404: warning (request, 'editItem', "Requested an item which doesn't exist: %s" % name) raise Http404 if delete: obj.delete() return HttpResponseRedirect(reverse("showItem", args=[name])) baseItemMenu(request, name) form = getForm(request, name, obj, editing=True) if form.is_valid(): form.save(commit=True) return HttpResponseRedirect(reverse("showItem", args=[name])) return render_to_response(template_name, { "form": form, "name": name, "id": id, 'profile': request.session['profile'], }, context_instance=RequestContext(request))
def importar(request, channel = False): rc = RequestContext(request) context = {'profile': request.session['profile'] } rev = reverse('importar_agenda') if channel: rev = reverse('importar_canal') context['crumbs'] = ( ( _('Home') , reverse('root') ), ( _('Import') , rev ), ) info(request, 'importar', 'Import process') setLeftMenu(request, actionMenu(request), _(u'Database actions')) if request.method == "POST": if channel: form = ChannelFileDirForm(request.POST, request.FILES) else: form = FileDirForm(request.POST, request.FILES) if form.is_valid(): result = Contacto.importar(request.user, form.cleaned_data, channel) if result: context['msg'] = _(u'Import process done. Total new contacts: %d' % result) else: context['msg'] = _(u'There were errors in import process.') else: context['form'] = form if not 'form' in context: if channel: context['form'] = ChannelFileDirForm() else: context['form'] = FileDirForm() context['label'] = _(u'Import') return render_to_response('addressbook/importar.html', context, rc)
def logout_view (request): """ Logout view """ info (request, 'logout_view', 'User %(username)s logged out ' % {'username':request.user.username} ) logout(request) #return HttpResponseRedirect("/") return HttpResponseRedirect( reverse('root') )
def showIncomingMessages(request): """ Show general information about an item family """ rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = (_('Incoming messages'), reverse('showIncomingMessages')) info(request, 'showIncomingMessages', 'Showing incoming messages specific information') setLeftMenu(request, baseItemMenu(), _(u'Summary')) context['object_list'] = IncomingMessage.objects.all() return render_to_response('incomingmessage_archive.html', context, rc)
def getListFromQuery(request, objModel, id=None, name=None): """ Generates a list from a object, ready for template using. A list is returned to the template, containing for every index: - Global name of the item - Name of the fields - Data contained on a list It is assumed that all the variables which are sent doesn't have any errors. This is checked before in the previous view. """ info(request, 'showItem', 'Getting a list from a query') if 'label' in ITEM_URL_DICT[name].keys(): globalname = ITEM_URL_DICT[name]['label'] else: globalname = _(objModel._meta.verbose_name) # Get special queries if available. if name in ITEM_URL_QUERY.keys(): allobj = objModel.objects.filter(**ITEM_URL_QUERY[name]).values() else: allobj = objModel.objects.values() if not allobj: return [globalname, None, None, name] fkeys = getKeys(objModel, urlname=name) cappedObj = [] for obj in allobj: # The django's id is always sent on first place block = [] # Then append the rest of fields. # This is done because we want to keep the right order between the keys and the data. block.append(obj['id']) for keyfield in fkeys: getRow(request, block, keyfield, obj, urlname=name) cappedObj.append(block) # Get a better name for a key if available, and translate it pretty_keys = [] for key in fkeys: if key in VERBOSE_KEYS.keys(): pretty_keys.append(VERBOSE_KEYS[key] ) continue for itemtest in objModel._meta.fields: if key in itemtest.name: tempvar = itemtest.verbose_name pretty_keys.append(tempvar) break # Checking fields with '_id' else: pretty_keys.append(str(_(key) ) ) item = [globalname, pretty_keys, cappedObj, name] return item
def eliminar_contactos(request, id): rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = ((_('Home'), reverse('root')), (_('Delete contact'), reverse('contacto_eliminar', args=[id])),) info(request, 'eliminar_contactos', 'Deleting a contact') setLeftMenu(request, contactMenu(request), _(u'Summary')) item = get_object_or_404(Contacto, pk = id) if request.method == 'POST': item.delete() return HttpResponseRedirect(reverse('contacto_listar')) context['object'] = item return render_to_response('addressbook/eliminar_contacto.html', context, rc)
def deleteMessage(request, object_id,type): object = None msg_object = None crumbs = ( ( _('Home') , reverse('root') ), ( _('Message List') , reverse('messagelist',args=[type]) ), ( _('Delete Message %(objectId)s') % {'objectId': object_id} , reverse('deletemessage',args=[type,object_id])), ) info (request, 'deleteMessage', 'deleting message') setLeftMenu (request, messageMenu (request), _('Message')) if type == 'Individual': try: object = Message.objects.get(pk = object_id) except Message.DoesNotExist: error (request, 'deleteMessage', _('Trying to delete a unexisting message')) elif type == 'Channel': try: msg_object = Message.objects.get(pk=object_id) object = msg_object.channelmessage_set.all()[0] except (ChannelMessage.DoesNotExist, Message.DoesNotExist): error (request, 'deleteMessage', _('Trying to delete a unexisting message')) if request.POST: if object.can_be_del(): object.delete() if msg_object: msg_object.delete() info (request, 'deleteMessage', _('Message %(object)s have been deleted' % {'object': object.__unicode__()})) return HttpResponseRedirect(reverse('messagelist',args=[type])) else: error (request, 'deleteMessage', _('Can not delete message %(objectID)s') %{'objectID':object.id}) return render_to_response(TEMPLATES['errors'], { 'profile': request.session['profile'], 'crumbs': crumbs, 'showInfoToUser': _('Can not delete message %(objectID)s') %{'objectID':object.id}, 'type': type },RequestContext (request) ) else: return render_to_response(TEMPLATES['delete_message'], { 'object': object, 'profile' : request.session['profile'], 'crumbs' : crumbs, 'type': type }, RequestContext (request))
def lista_contactos(request): rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = ( ( _('Home') , reverse('root') ), ( _('Contact list') , reverse('contacto_listar') ), ) info(request, 'lista_contactos', 'Listing contacts') setLeftMenu(request, contactMenu(request), _(u'Summary')) context['object_list'] = request.user.contacto_set.all() if request.POST: data = request.POST msg = Message.easy_create(data['text'], adapt_mobile(data['mobile']), request.user) context['msg'] = msg return render_to_response('addressbook/listar_contactos.html',context, rc)
def ajaxNewChannel(request): info(request,"ajaxNewChannel","Creating new Channel") if request.is_ajax(): kwargs = {'user':request.user} newForm = ChannelForm(request.POST,**kwargs) if newForm.is_valid(): newForm.save() return HttpResponse(simplejson.dumps({'data':True,'ajax':True,'errors':False})) else: warning(request,"ajaxNewChannel","Not valid form") return HttpResponse(simplejson.dumps({'data':False,'ajax':True, 'errors':display_form(newForm)})) else: warning(request,"ajaxNewSubscriber","this view is only for ajax") raise Http404
def getForm(request, name='', obj=None, editing=False): """ Returns a form according an url """ info (request, 'getForm', 'Getting a form') if editing: try: form = getReadyForm(request, form=ITEM_URL_DICT[name]['editform'], obj=obj, urlname=name) return form except KeyError: pass try: form = getReadyForm(request, form=ITEM_URL_DICT[name]['form'], obj=obj, urlname=name) except KeyError: error(request, 'getForm', "Form not found for this url: %(name)s" % {'name': name} ) raise Http404 return form
def getReadyForm(request, form=[], obj=None, urlname=None): """ Decides whenever if a POST form is needed or not. """ info (request, 'getReadyForm', 'Decides whenever if a POST form is needed or not.') kwargs = {} if obj: kwargs = {'instance': obj} try: if 'language' in ITEM_URL_DICT[urlname]['form_args']: kwargs['language'] = request.LANGUAGE_CODE except KeyError: pass if request.method == "POST": item = form(request.user.id, request.POST, **kwargs) else: item = form(request.user.id, **kwargs) return item
def buscar_contactos(request): rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = ( ( _('Home') , reverse('root') ), ( _('Search contact') , reverse('contacto_buscar') ), ) info(request, 'buscar_contactos', 'Searching contacts') setLeftMenu(request, contactMenu(request), _(u'Summary')) if request.POST: form = SearchForm(request.POST) if form.is_valid(): context['object_list'] = Contacto.search(form.cleaned_data['search_field'], request.user) return render_to_response('addressbook/listar_contactos.html',context, rc) else: context['form'] = form else: context['form'] = SearchForm() return render_to_response('addressbook/buscar_contactos.html', context, rc)
def showItemSummary(request, name, template_name=SUMMARY_ITEM_TEMPLATE): """ Show general information about an item family """ info (request, 'showItemSummary', 'Showing showItemSummary') baseItemMenu(request, name) try: list = URL_GROUP_ITEMS[name] except KeyError: error(request, 'showItemSummary', "Requested a url group which doesn't exist: %s" % name) raise Http404 item = [] for url in list: item.append(getObj(request, name=url) ) return render_to_response(template_name, { "item": item, "name": name, "fullname": getGroupFullname(name), "profile" : request.session['profile']}, context_instance=RequestContext(request))
def ajax_filter_typesSms(request): info(request,"ajaxFilterTypeSms","view types sms for account") if request.is_ajax(): capabilities = {} if ('account' in request.GET): access = Access.objects.filter(account__exact = Account.objects.get(id=request.GET['account'])) for acc in access: capabilities.update(dict(acc.capabilities.values_list())) else: capabilities = dict(Capabilities.objects.all().values_list()) return render_to_response(TEMPLATES['sms_types'], {'data':capabilities}, RequestContext(request)) else: warning(request,"ajaxFilterTypeSms","this view is only for ajax") raise Http404
def ajaxSubscriber(request): info(request,"ajaxSubscriber","return list of channel's subscriber") if not request.is_ajax(): warning(request,"ajaxSubscriber","this view is only for ajax") raise Http404 if ('channel' in request.GET) and (request.GET['channel'] != 'undefined'): chn = Channel.objects.get(id = request.GET['channel']) subs = chn.subscriber_set.values() return render_to_response( TEMPLATES['ajax_subscriber'], { 'data': subs, 'pag_index': settings.SUBSCRIBER_PAGINATE, }, RequestContext(request) ) subs=None return render_to_response( TEMPLATES['ajax_subscriber'], { 'data': subs, 'pag_index': settings.SUBSCRIBER_PAGINATE, }, RequestContext(request) )
def gestion_contactos(request, id = None): rc = RequestContext(request) context = {'profile': request.session['profile'] } item = None if id: context['crumbs'] = ((_('Home'), reverse('root')), (_('Edit contact'), reverse('contacto_editar', args=[id])),) info(request, 'gestion_contactos', 'Edition a contact') item = get_object_or_404(Contacto, pk = id) context['label'] = _(u'Edit') context['object'] = item else: context['crumbs'] = ( (_('Home'), reverse('root')), (_('New contact'), reverse('contacto_crear')),) info(request, 'gestion_contactos', 'Adding a new contact') context['label'] = _(u'New') setLeftMenu(request, contactMenu(request), _(u'Summary')) if request.POST: form = ContactoForm(request.POST, instance = item) if item else ContactoForm(request.POST) if not item: dato_form = MultiDatoForm(request.POST) dir_form = DireccionForm(request.POST) if form.is_valid(): item = form.save(request.user) if item and not id and dato_form.is_valid() and dir_form.is_valid(): data = dato_form.cleaned_data if 'clase' in data and 'phone' in data: item.create_data(data['clase'], data['phone']) if 'email' in data: item.create_data(EM_PERSONAL, data['email']) if dir_form.cleaned_data['tipo']: dir = dir_form.save(item) return HttpResponseRedirect(reverse('contacto_listar')) else: context['form'] = form if not id: context['dato_form'] = dato_form context['dir_form'] = dir_form else: context['form'] = ContactoForm(instance = item) if item else ContactoForm() if not id: context['dato_form'] = MultiDatoForm() context['dir_form'] = DireccionForm(instance = item.direccion()) if item and item.direccion() else DireccionForm() return render_to_response('addressbook/gestion_contactos.html', context, rc)
def ajaxNewSubscriber(request): info(request,"ajaxNewSubscriber","Creating new Subscriber to channel") if request.is_ajax(): newForm = SubscriberForm(request.POST) if not newForm.is_valid(): return HttpResponse(simplejson.dumps({'data':False,'ajax':True,'errors':display_form(newForm)})) elif 'channel' not in request.POST: newForm.errors['__all__'] = u"There was an error while trying to choose a channel. Please, try it again." return HttpResponse(simplejson.dumps({'data':False,'ajax':True,'errors':display_form(newForm)})) else: mobile = request.POST['mobile'] channel = request.POST['channel'] name = request.POST['name'] Subscriber.create(mobile, channel, name) return HttpResponse(simplejson.dumps({'data':True,'ajax':True,'errors':False, 'form':display_form(SubscriberForm()) })) else: warning(request,"ajaxNewSubscriber","this view is only for ajax") raise Http404
def channelList(request, allow_empty=True): """ Show a list of channels. """ crumbs = ( ( _('Home'), reverse('root')), ( _('Channel List'), reverse('showList')), ) info(request, 'channelList', 'Listing channels') setLeftMenu (request, channelMenu (), _('Channels')) kwargs = {'user':request.user} newForm = ChannelForm(**kwargs) extra_context = { 'profile' : request.session['profile'], 'crumbs':crumbs, 'channelform': newForm } return render_to_response(TEMPLATES['channel_list'], extra_context, RequestContext(request) )
def update_subscriber(request, id): rc = RequestContext(request) info(request, 'update_subscriber', 'Updating subscriber') setLeftMenu(request, create_subscriber_menu(), _('Channel\'s Subscriber')) crumbs = ( ( _('Home'), reverse('root')), ( _('Channel\'s Subscriber'), reverse('showSubscriber')), ( _('Update Subscriber'), reverse('update_subscriber', args=[id])), ) item = get_object_or_404(Subscriber, pk = id) context = {'object': item} if request.POST: form = SubscriberFullForm(request.user, request.POST, instance = item) if form.is_valid(): item = form.save() return HttpResponseRedirect(reverse('showSubscriber')) else: context['form'] = form else: context['form'] = SubscriberFullForm(request.user, instance = item) context['crumbs'] = crumbs context['profile'] = request.session['profile'] return render_to_response('mt/subscriber_actions.html', context, rc)
def showSubscriber(request): info(request, 'showSubscriber', 'Show subscriber') setLeftMenu(request, create_subscriber_menu(), _('Channel\'s Subscriber')) context = {} context['crumbs'] = ( ( _('Home'), reverse('root')), ( _('Channel\'s Subscriber'), reverse('showSubscriber')), ) channels = ChannelChoice(request.user) if (len(channels.fields['channel']._choices) == 0): channels = None newSubscriber = SubscriberForm() return render_to_response(TEMPLATES['show_subscriber'], { 'channels': channels, 'subscriber' : newSubscriber, 'profile': request.session['profile'], 'crumbs': context['crumbs'], 'form_empty': display_form(newSubscriber) }, RequestContext(request) )
def exportar(request): rc = RequestContext(request) context = {'profile': request.session['profile'] } context['crumbs'] = ( ( _('Home') , reverse('root') ), ( _('Export') , reverse('exportar_agenda') ), ) info(request, 'exportar', 'Export process') setLeftMenu(request, actionMenu(request), _(u'Database actions')) if request.method == "POST": form = FileTypeForm(request.POST) if form.is_valid(): tipo = form.cleaned_data['type'] result = Contacto.exportar(request.user, tipo) if result: return HttpResponse(result, mimetype=TIPOS_RESPUESTA[int(tipo)]) else: context['msg'] = _(u'There were errors in export process.') else: context['form'] = form if not 'form' in context: context['form'] = FileTypeForm() context['label'] = _(u'Export') return render_to_response('addressbook/importar.html', context, rc)
def updateChannel(request, object_id): """ #TODO """ crumbs = ( ( _('Home') , reverse('root') ), ( _('Channel List') , reverse('showList') ), ( _('Update Channel %(objectId)s') % {'objectId': object_id} , reverse('update_channel',args=[object_id])), ) info (request, 'updateChannel', 'Updating channel') setLeftMenu (request, channelMenu (), _('Channels')) return update_object( request, Channel, object_id = object_id, post_save_redirect = reverse('showList'), template_name=TEMPLATES['update_channel'], extra_context = {'profile' : request.session['profile'], 'crumbs':crumbs, 'use': 'update' }, )
def ajaxChannelList(request): info(request,"ajaxSubscriber","return list of channel") if request.is_ajax(): if checkAdmin(request.user): chns = Channel.objects.all() else: chns = Channel.objects.filter(customer=request.user) chns = chns.filter( Q(destructionDate__gte = datetime.datetime.now()) | Q(destructionDate__isnull = True) ) return render_to_response(TEMPLATES['ajax_channel_list'], { 'data': chns, 'pag_index': settings.SUBSCRIBER_PAGINATE, }, RequestContext(request) ) else: warning(request,"ajaxSubscriber","this view is only for ajax") raise Http404