Last messages on forum in categories Java Script/forum/forum/3/ru-RUSat, 31 Dec 2016 14:28:34 +0000Python + Django/Flask + MySQL шаблоны для интеграции AnyChart JS (визуализация данных)/forum/topic/5113/#post-32672Понял. Спасибо. Будет надобность - попробую)))aleck.onimSat, 31 Dec 2016 14:28:21 +0000/forum/topic/5113/#post-32672Python + Django/Flask + MySQL шаблоны для интеграции AnyChart JS (визуализация данных)/forum/topic/5113/#post-32667А у Вас есть возможность бесплатного использования ваших разработок?aleck.onimFri, 30 Dec 2016 20:55:24 +0000/forum/topic/5113/#post-32667Глупый вопрос по ReactJS/forum/topic/5016/#post-32072Но Вы ведь не передаете HTML страницы целиком, при первой загрузке. HTML генерируется "на лету". Я плохой учитель и поэтому мне тяжело Вам объяснить, но я настоятельно рекомендую почитать, перечитать и перечитать после перепрочтения как работает "черная магия" ReactJS. И только после того, как Вы ответите себе на вопросы *"Как?"*, *"Откуда?"* и *"Зачем?"* приступать к разработке или отказаться от его использования.TheFoolWed, 09 Nov 2016 07:20:07 +0000/forum/topic/5016/#post-32072Закрытие всплывающего окна с формой./forum/topic/4887/#post-31294Для добавления записи в базу данных использую AJAX форму, этот скрипт отображает и скрывает форму: $(document).ready(function(){ //Скрыть PopUp при загрузке страницы PopUpHide(); }); //Функция отображения PopUp function PopUpShow(){ $("#show-project-form").show(); } //Функция скрытия PopUp function PopUpHide(){ $("#show-project-form").hide(); } В блоке вместе с формой есть кнопка отмена, которая скрывает блок. После того как я добавил запись в бд, закрыть блок, и обновить страницу. Для записи использую скрипт: $(document).on('submit', '#add-project-form', function(e){ e.preventDefault(); $.ajax({ type: 'POST', url: '/projects/add/', data:{ project_name:$('#project_name').val(), description:$('#description').val(), csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() }, sucess:function() { } }); }); если в функцию sucess:function() добавить : alert("Успех!"), то ничего не произойдет, т.е. функция не вызвалась, как мне скрыть блок, и обновить форму, и почему функция не вызывается? votugzamWed, 14 Sep 2016 17:44:30 +0000/forum/topic/4887/#post-31294Flux+ReactJS/forum/topic/3611/#post-29972>Ясно, спасибо :) Есть литература. И не видео-уроки даже: https://www.gitbook.com/@maxfarseer/dashboard Порядок изучения [React для начинающих][1] [Создаем приложение на Redux][2] [Реакт-роутер и все все все][3] [1]: https://www.gitbook.com/book/maxfarseer/react-course-ru/details [2]: https://www.gitbook.com/book/maxfarseer/redux-course-ru/details [3]: https://www.gitbook.com/book/maxfarseer/react-router-course-ru/detailsmaxfarseerSun, 05 Jun 2016 12:47:51 +0000/forum/topic/3611/#post-29972как при реквесте на сайт обновлять тайтл открытой страницы в браузере/forum/topic/4565/#post-29576 var storage = localStorage; storage.setItem('title', document.title); $(window).bind('storage', function(e){ document.title = e.originalEvent.newValue }) Вот самый простой и топорный вариант. Попробуйте на сервере генерировать случайные числа и записывать их в title шаблона, ну и в шаблон вставьте код. Потом попробуйте открыть несколько вкладок. >Теперь вот тут поподробнее. Как должен локалсторидж измениться? Что его изменит? И следующий вопрос в очереди есть. Вы уже понимаете какой, да? storage event это вызов setItem, removeItem или clear. Любой из этих вызовов вызовет после себя storage event. Логику обработки определяете Вы.aybTue, 17 May 2016 08:21:38 +0000/forum/topic/4565/#post-29576как при реквесте на сайт обновлять тайтл открытой страницы в браузере/forum/topic/4565/#post-29557мидла ж не может изменять респонс другой страницы? просто дергать каждые пять секунд ту страницу?AcmanMon, 16 May 2016 20:38:13 +0000/forum/topic/4565/#post-29557загрузка изображения ReactJS/forum/topic/4504/#post-29066а в чём проблема? На сервер картинка уходит. а вообще приведённый код — образец как не надо писать на реактеN.E.MMon, 25 Apr 2016 14:56:15 +0000/forum/topic/4504/#post-29066react typescript etc/forum/topic/4491/#post-29038Спасибо, за пояснения) А вообще использование jQuery с реактом есть сильно плохой тон? Просто я к чему, в jQUI есть много полезный плюшек, в духе календарика и т.п UPD: хотя не совсем по теме конечно (писать на форуме про бэк проблемы/вопросы по фронту), но надеюсь меня простят)mountySun, 24 Apr 2016 19:36:01 +0000/forum/topic/4491/#post-29038react typescript etc/forum/topic/4491/#post-29031>так а в чем тогда отличие, грубо говоря, от того, что делает джанга? Также генерит темплейт на сервере и отдает ее клиенту. отличие в том, что на джанго не сделать изоморфного приложения. UPD: хотя я уже сомневаюсь, что не сделать. Надо подумать.N.E.MSat, 23 Apr 2016 20:52:14 +0000/forum/topic/4491/#post-29031react typescript etc/forum/topic/4491/#post-29019На том проекте был бекбон, потом ангулар, и типа все круто, но гора кода, костыли какие-то, велосипеды. Чтобы добавить колонку в админке, нужно было день ковырять это все и копипастить гору кода.alerionSat, 23 Apr 2016 14:12:30 +0000/forum/topic/4491/#post-29019Снятие галочки с чекбокса/forum/topic/4440/#post-28585Здравствуйте! Помогите пожалуйста со следующей проблемой. Я ковыряюсь в чужом большом проекте и есть необходимость изменить одну вещь. Во вложениях есть скрин меню выбора большого района и дочерних от него подрайонов в виде чекбоксов. Когда я ставлю галочку на большой район, автоматически выбираються все его подрайоны, это правильно, а вот когда я нажимаю кнопку найти и все это дело сортируется, галочка с большого района снимается, а на всех его подрайонах остается, это неправильно, на большом районе в таком случае галочка также должна оставаться. Вопрос в том, что я не могу найти в коде логику, которая за исчезновение этой галки отвечает. Подскажите пожалуйста где это здесь описывается: function csrfSafeMethod(t) { return /^(GET|HEAD|OPTION|TRACE)$/.test(t) } function getCookie(t) { var e = null; if (document.cookie && '' != document.cookie) for (var c = document.cookie.split(';'), i = (c.length, 0); i < c.length; i++) { var a = jQuery.trim(c[i]); if (a.substring(0, t.length + 1) == t + '=') { var o = a.substring(t.length + 1); e = decodeURIComponent(o); break } } return e } function filterHideShow(t) { var e = $('#id_object_all :selected').val(); 'dom' == e ? $('#my_f').length ? $('#fldMetro').after(t) : $('#index_filter') && $('#fldSublocality').before(t) : $('#house-type').detach(), - 1 != ['kvartiru', 'dom'].indexOf(e) ? $('#fldRoomsNum').show() : $('#fldRoomsNum').hide(), 'kommercheskuyu-nedvizhimost' == e ? $('#fldObjType').show() : $('#fldObjType').hide() } function metroHideShow() { var t = $('#id_city :selected').val(); - 1 != ['3', '20', '8'].indexOf(t) ? $('fldMetro').show() : $('#fldMetro').hide() } function rentTermHideShow(t) { var e = $('#id_action').val(); - 1 != ['sdam', 'snimu'].indexOf(e) ? /.+\/grid.*/.test(location.pathname) ? ($('#rent-term').append(t), $('#rent-term').show()) : $('#id_object_all').after(t) : (t.detach(), $('#rent-term').hide()) } function hideShowNewBuilding(t) { act = $('#id_action').val(), obj = $('#id_object_all').val(), 'prodam' != act || 'kvartiru' != obj && 'gostinku-komnatu' != obj ? t.detach() : $('#fldSublocality').before(t) } $(document).ready(function () { function t() { var t = { title: 'title', url: window.post_url() + window.location.search }; window.history.pushState(t, t.title, t.url) } $.ajaxSetup({ crossDomain: !1, beforeSend: function (t, e) { csrfSafeMethod(e.type) || t.setRequestHeader('X-CSRFToken', getCookie('csrftoken')) } }); var e = $('#id_rent_term'), c = $('#new-building'), i = $('#house-type'), a = window.location.href, o = new RegExp(/(prodam|sdam|snimu|kuplyu)/), n = $('#current-city').attr('city-id'), s = $('#top-city :selected').attr('slug'); if (o.test(a)) { var r = a.match(/.+\/([a-z-]+)\/(prodam|sdam|snimu|kuplyu)-([a-z-]+)[\/.+]?/); null != r && ($('#id_action').val(r[2]), $('#id_object_all').val(r[3]), $('#id_city').val(n)) } else $('#id_city').val(n); filterHideShow(i), metroHideShow(), rentTermHideShow(e), hideShowNewBuilding(c), $('#id_action').change(function () { rentTermHideShow(e), hideShowNewBuilding(c), $('#search_query').attr('action', post_url()), t() }), $('#loc-wrap input:checkbox').each(function () { var t = $(this).parent().text(); 1 == $(this).prop('checked') && $('#chosen-subloc').append('<span>' + t + '</span>') }), $('#metr-choice input:checkbox').each(function () { var t = $(this).parent().text(); 1 == $(this).prop('checked') && $('#chosen-metro').append('<span>' + t + '</span>') }); var l = $('.province-list label:contains(" Харьковский р-н")').clone(withDataAndEvents = !0); $('#id_8subloc').append(l), window.toHistory = t, $('#search_query').attr('action', post_url), $('#id_object_all').change(function () { filterHideShow(i), $('#search_query').attr('action', post_url()), hideShowNewBuilding(c) }), $('#id_city').change(function () { var t = $(this).val(), e = $('#top-city option[value=' + t + ']').attr('slug'), c = $('#id_city option:selected').text(), i = new RegExp('^/[a-zs-]+', 'i'); $.ajax({ url: '/board/set_city/', type: 'POST', data: { chosen_city_id: t }, success: function (a) { $('.first-invisible a').each(function () { var t = $(this).attr('href'); t = t.replace(i, e), $(this).attr('href', '/' + t) }), $('#current-city span').replaceWith('<span>' + c + '</span>'), $('#current-city').attr('slug', e), $('#current-city').attr('city-id', t), $('#search_query').attr('action', post_url()); var o = location.pathname.replace(s, e); - 1 == o.indexOf('/grid') ? location.href = o : location.href = o + '?woagent=on' }, error: function () { alert('Ошибка при отправке данных выбора города!') } }) }), $('#without_agent').click(function () { console.log('Ci'), $('#id_woagent').val('checked'), $('#search_query').submit() }), $('span.to-push').click(function () { $(this).next().toggle() }), $('.box-select-close').bind('click', function () { $(this).parent().show() }), $('.ok-tab').click(function () { $(this).parent().hide() }), $('#province-tab').click(function () { $('#sublocality-choice').show(), $('#subloc-tab').removeClass('active-tab'), $('#province-choice').hide(), $(this).addClass('active-tab') }), $('#subloc-tab').click(function () { $('#province-choice').hide(), $('#province-tab').removeClass('active-tab'), $('#sublocality-choice').show(), $(this).addClass('active-tab') }), $('#sublocality-choice input:checkbox, #province-choice input:checkbox').change(function () { var t = $(this).parent().text(); 1 == $(this).prop('checked') ? ($(this).parent().hasClass('big-subloc-head') && $(this).parent().parent().find('li label').each(function () { var t = $(this).text(); $(this).find('input:checkbox').prop('checked', !0), $('#chosen-subloc span:contains("' + t + '")').detach() }), $('#chosen-subloc').append('<span>' + t + '</span>')) : ($(this).parent().hasClass('big-subloc-head') && $(this).parent().parent().find('li input:checkbox').each(function () { $(this).prop('checked', !1) }), $('#chosen-subloc span:contains("' + t + '")').detach()) }), $('#chosen-subloc').on('click', 'span', function () { var t = $(this).text(); $(this).detach(); var e = ($('#sublocality-choice label, #province-choice label'), $('#sublocality-choice label:contains("' + t + '"), #province-choice label:contains("' + t + '")')); $(e).hasClass('big-subloc-head') ? $(e).parent().find('input:checkbox').each(function () { $(this).prop('checked', !1) }) : $(e).find('input:checkbox').prop('checked', !1) }), $('#metr-choice input:checkbox').change(function () { var t = $(this).parent().text(); 1 == $(this).prop('checked') ? ($(this).parent().hasClass('bold') && $(this).parent().next().find('li label').each(function () { var t = $(this).text(); $(this).find('input:checkbox').prop('checked', !0), $('#chosen-metro span:contains("' + t + '")').detach() }), $('#chosen-metro').append('<span>' + t + '</span')) : ($(this).parent().hasClass('bold') && $(this).parent().next().find('input:checkbox').each(function () { $(this).prop('checked', !1) }), $('#chosen-metro span:contains("' + t + '")').detach()) }), $('#chosen-metro').on('click', 'span', function () { var t = $(this).text(); $(this).detach(); var e = $('#metr-choice label:contains("' + t + '")'); e.hasClass('bold') ? $(e).parent().find('input:checkbox').each(function () { $(this).prop('checked', !1) }) : $(e).find('input:checkbox').prop('checked', !1) }), $('.fast-adm-del-link').click(function (t) { t.preventDefault(); var e = this.href, c = $(this).closest('.ad-preview'), i = e.match(/\/(\d+)\//), a = i[1]; $('#confirm-pop-up').dialog(), $('#confirm-yes').click(function () { $.ajax({ url: e, type: 'POST', data: { pk: a }, success: function (t) { c.detach(), $.messagePopUp('Объявление удалено') }, error: function () { alert('Ошибка! Объявление не удалено') } }), $('#confirm-pop-up').dialog('close') }), $('#confirm-no').click(function () { $('#confirm-pop-up').dialog('close') }) }), $('.ad-preview').on('click', '.star', function () { var t = $(this).closest('.item-info').find('.kod').text().replace(/\D/g, ''), e = this.src, c = this; $.ajax({ url: '/board/add_to_fav/', type: 'POST', data: { id: t }, dataType: 'json', success: function (t) { $.messagePopUp(t.message), 'success' == t.result && ($(c).attr('src', e.replace(/star-grey/, 'star')), $(c).attr('class', 'star-true'), $(c).attr('title', 'Убрать из моего блокнота'), $(c).attr('alt', 'Убрать из блокнота')) }, error: function () { aleft('Ошибка обработки данных!') } }) }), $('.ad-preview').on('click', '.star-true', function () { var t = $(this).closest('.item-info').find('.kod').text().replace(/\D/g, ''), e = this.src, c = this; $.ajax({ url: '/board/remove_from_fav/', type: 'POST', data: { id: t }, dataType: 'json', success: function (t) { 'success' == t.result ? ($(c).attr('src', e.replace(/star/, 'star-grey')), $(c).attr('class', 'star'), $(c).attr('title', 'Добавить в мой блокнот'), $(c).attr('alt', 'Добавить в блокнот'), $.messagePopUp(t.message)) : alert('Произошла непредвиденная ошибка!') }, error: function () { alert('Ошибка обработки данных!') } }) }), $('.fast-adm-up').click(function () { var t = $(this).closest('.item-info').find('.kod').text().replace(/\D/g, ''); $.ajax({ type: 'POST', url: '/board/' + t + '/up/', success: function (t) { $.messagePopUp(t) } }) }), $('.adm-up').click(function () { var t = $(this).closest('#left_info').find('.f_value.kod').text().replace(/\D/g, ''); $.ajax({ type: 'POST', url: '/board/' + t + '/up/', success: function (t) { $.messagePopUp(t) } }) }) }); Сразу в голову пришла мысль изменить prop('checked', !1) на prop('checked', !0), но оказалось, что не за это они отвечают, я теряюсь в догадках, где мне это искать megolomanWed, 06 Apr 2016 12:45:52 +0000/forum/topic/4440/#post-28585AJAX и картинки/forum/topic/4314/#post-27836вы вроде забыли в шаблоне исполозовать атрибут `url` для поля с картинкой ( для получения ссылки на картинку) /rel1.8/ref/models/fields.html?highlight=imagefield#django.db.models.fields.files.FieldFile.url + ищите ForeignKey обратная связьbaloonSat, 05 Mar 2016 00:40:09 +0000/forum/topic/4314/#post-27836Добавить js событие в model.form. /forum/topic/4073/#post-26249 1. Вариант номер раз: вы можете определить свой виджет именно для этого поля, и в нём писать что захочется; 2. Вариант номер лучше: js пишется отдельно, и в нём назначается обработчик события click именно для нужного поля.N.E.MSat, 26 Dec 2015 21:14:55 +0000/forum/topic/4073/#post-26249Создание формы через AJAX/forum/topic/3677/#post-25693спасибо, я все таки решил сделать все на CMS **[реклама через кассу]** у нее огромное количество преимуществsilenserMon, 30 Nov 2015 14:09:16 +0000/forum/topic/3677/#post-25693Создание формы через AJAX/forum/topic/3677/#post-25681>если хотите упростить себе жизнь читнул я в репозитории код этого чуда. 1200 строк кода чтобы форму отправить.. с жиквери.. var form = document.forms.myForm; $.ajax({ url: form.action, method: form.method, data: new FormData(form), processData: false, contentType: false }). done(funtion(data){console.log(data)}); не знаю с какой версии експлорере появилась формдата(с 9го вроде), но она умеет даже файлы отправлять. ваще бомбаalexscratSun, 29 Nov 2015 17:29:22 +0000/forum/topic/3677/#post-25681Django + Ajax. Почему ajax летит мимо обработчика на сервере?/forum/topic/3923/#post-25440А как добавить? Вот так не работает: # forms.py ``` class myDelaNew(forms.ModelForm): class Meta: model = MyDela fields = ['name', 'information', 'id'] ``` # views.py ``` def NBEdit(request): if request.method == "POST" and request.is_ajax(): form = myDelaNew() form.Meta.fields.id = request.POST.get("id", "") form.Meta.fields.name = request.POST.get("name", "")[:250] form.Meta.fields.information = request.POST.get("info", "") form.save() return HttpResponse("ok") else: return HttpResponse("bad") ```neolizWed, 18 Nov 2015 18:06:27 +0000/forum/topic/3923/#post-25440Django + Ajax. Почему ajax летит мимо обработчика на сервере?/forum/topic/3923/#post-25439Вы её и так не выводите. Добавьте просто валидацию через форму перед сохранением. alerionWed, 18 Nov 2015 17:31:59 +0000/forum/topic/3923/#post-25439Django + Ajax. Почему ajax летит мимо обработчика на сервере?/forum/topic/3923/#post-25437Что такое полотно? CSS-ом можно формы какими угодно сделать. Валидация всегда должна быть на стороне сервера, на клиенте -- это просто для удобства пользователя. JS отключается на раз, или через curl запрос отослать, и уже нет вашей валидации и можно пихать что угодно. > Как подебажить??? Может быть в IDE дебаге, или читайте как пользоваться pdb.alerionWed, 18 Nov 2015 17:10:52 +0000/forum/topic/3923/#post-25437Поиск по сайту на Django+Angular/forum/topic/3868/#post-25174Это вам на форум по Ангулару. Тут по JS могут ответить, но что-то базовое, или по проектированию, а не по реализации. Но может кто-то и делал такое и подскажет.alerionMon, 02 Nov 2015 13:59:08 +0000/forum/topic/3868/#post-25174Поиск по сайту на Django+Angular/forum/topic/3868/#post-25171Индексируете содержимое сайта в Apache Solr, Elastic Search или Sphinx Search и ищите. Если нужно простой поиск и база данных не большая, можете прям через LIKE искать. Еще в PostgreSQL и MyISAM есть полнотекстовый поиск.alerionMon, 02 Nov 2015 11:53:03 +0000/forum/topic/3868/#post-25171Создание формы через AJAX/forum/topic/3677/#post-24132Доброго времени суток! Пытался создать с помощью ajax форму Вот вьюха: @render_to('core/absence/index.html') @login_required() def edit_absence(request): editform = EditForm(request = request) return render(request, {'editform':editform}) Вот скрипт: $("#btn-edit").click(function(){ $.post("{% url 'core:edit' %}"); }); Но форма не создается. Что здесь не так? В поиске ничего не нашел, там только примеры того, как сохранять данные из уже заполненной формыmixxx892Fri, 11 Sep 2015 16:58:39 +0000/forum/topic/3677/#post-24132Flux+ReactJS/forum/topic/3611/#post-23744Ну насколько я понял flux - это только предлагаемая и продвигаемая фейсбуком архитектура. Основная идея - однонаправленый dataflow, когда action координируется через диспетчер в нужный storage, а потом рендерится контороллерами. Они вообще конкретных реализаций не навязывают, оттого их и куча. Каждый пилит как хочет. При желании можно выбросить Реакт, а взять какой-нить хендлбарс и юзать. А компоненты в Реакте - это круто, на мой взгляд. Кода правда в разы больше получится, чем если юзать какой-нить навороченый фреймворк, но сложность приложения на Ангуляре растет прямо таки нелинейно с ростом приожения. Так что, поддержка должна быть прощеalexscratFri, 21 Aug 2015 05:50:28 +0000/forum/topic/3611/#post-23744Кракозябры при передаче данных из переменной шаблона в переменную Javascript./forum/topic/3575/#post-23507я из модели кириллические названия вытягивал так: `json.dumps(list(MyModel.objects.values_list('title', flat=True)), ensure_ascii=False)`AcmanFri, 07 Aug 2015 17:50:32 +0000/forum/topic/3575/#post-23507Кракозябры при передаче данных из переменной шаблона в переменную Javascript./forum/topic/3575/#post-23499json — это просто-напросто общепринятый формат обмена данными. Да, в него можно сложные структуры питоньи (списки, словари и т.п.) упаковывать, и js будет их понимать.N.E.MFri, 07 Aug 2015 14:50:54 +0000/forum/topic/3575/#post-23499Кракозябры при передаче данных из переменной шаблона в переменную Javascript./forum/topic/3575/#post-23495А, ёлки, у вас же массив. В json его упакуйте, а в шаблоне распакуйте обратно: `var js_variable = JSON.parse('{{ django_variable|safe }}')`lampslaveFri, 07 Aug 2015 14:26:35 +0000/forum/topic/3575/#post-23495Кракозябры при передаче данных из переменной шаблона в переменную Javascript./forum/topic/3575/#post-23492Последнее наблюдение: Если присваивать к js переменной не массив русских строк, а одну русскую строку, то всё отображается корректно. Например, var js_variable = {{ django_variable.0|safe }} Что за ерунда?zelas69Fri, 07 Aug 2015 13:35:19 +0000/forum/topic/3575/#post-23492Кракозябры при передаче данных из переменной шаблона в переменную Javascript./forum/topic/3575/#post-23486Здравствуйте. Хочу передать в шаблон массив русских строк через контекстный словарь. Далее присвоить его переменной js, путём var js_variable = {{ django_variable|safe }} и работать с ним как с массивом строк js. В случае с английскими буквами это работает, но с кириллицей в js переменную пишутся кракозябры. Вопрос - почему, и как это побороть? Заранее благодарю за ответы.zelas69Fri, 07 Aug 2015 12:54:57 +0000/forum/topic/3575/#post-23486AJAX/forum/topic/3572/#post-23476Доброго времени суток!) Удачно передаю одно значение из вьюхи в джаваскрипт $('#right').click(function(event){ var self=this; var postid; postid = $('.photo').attr("data-post"); var url = '{% url "travel:change" %}'; $.get(url, {post_id: postid}, function(data){ $('.name').text(data); }); }); def change(request): post_id = None if request.method == 'GET': post_id=request.GET['post_id'] if post_id: post = Post.objects.get(id=int(post_id)+1) title = post.title return HttpResponse(title) но как передать сразу два? например, title и post.id. `return Httpresponse({title, post.id } )` передает сразу оба значения, но в виде одной сплошной строки. Гугл ничего не подсказал(mixxx892Thu, 06 Aug 2015 18:06:51 +0000/forum/topic/3572/#post-23476передача значений элементов, создаваемых в цикле/forum/topic/3540/#post-23305Доброго времени суток!) Пытаюсь сделать вставку ббкода для видео на форум На форуме блоки с постами создаются в цикле вот класс, переделывающий тег в шаблон: class VideoTag(TagBase): def __init__(self, name, **kwargs): super(VideoTag, self).__init__(name, inline=True) def open(self, parser, params, *args): if params.strip(): self.auto_close = True super(VideoTag, self).open(parser, params, *args) def render_open(self, parser, node_index): contents = self.get_contents(parser) self.skip_contents(parser) # Validate url to avoid any XSS attacks if self.params: url = self.params.strip() else: url = strip_bbcode(contents) url = url.replace(u'"', u"%22").strip() if not url: return u'' try: scheme, netloc, path, params, query, fragment = urlparse(url) if not scheme: url = u'http://' + url scheme, netloc, path, params, query, fragment = urlparse(url) except ValueError: return u'' if scheme.lower() not in (u'http', u'https', u'ftp'): return u'' template=u""" <script type="text/javascript"> </script> <div class ="video" id="video" data="URL"> <script type="text/javascript" src ="/static/djangobb_forum/js/markitup/videotag.js"> </script> </div> """ return template.replace(u'URL', PostMarkup.standard_replace_no_break(url)) Вот скрипт для парсинга видео( в данном примере только с youtube) myUrl = $('.video').attr("data");var u if (u=myUrl.match(/^https?:\/\/(?:www\.)?(?:youtu\.be\/|(?:m\.)?youtube(?:-nocookie)?\.com\/(?:(?:watch|movie)\?(?:.*&)?v=|embed\/|v\/|attribution_link.*watch%3Fv%3D))([-_\w\d]+)(?:.*(?:[&?]start|[?&#]t)=(?:(\d+)h)?(?:(\d+)m)?(\d+)?)?/i)) document.write('<iframe width="560" height="315" frameborder="0" allowfullscreen src="'+url+'"></iframe>'); Когда нажимаю предпросмотр на форуме при создании тега, все прекрасно работает, но когда отправляю сообщение, в нем такое же видео, как в первом посте, то есть скрипт обработки видео берёт первый элемент на странице с class="video". Как передать по-другому, не через класс? Поскольку это не событие onclick, то атрибут this использовать не получится.mixxx892Tue, 28 Jul 2015 16:44:32 +0000/forum/topic/3540/#post-23305