Была свободно связанная проблема здесь , текстовая область с 100% шириной игнорирует родителя element' s ширина в IE7
не знают, находилось ли какое-либо окончательное решение когда-либо, но кажется, что самое близкое было word-break:break-all, который мог бы сделать задание в Интернете Exploder.
я также нашел этот http://petesbloggerama.blogspot.com/2007/02/firefox-ie-word-wrap-word-break-tables.html проложенный под землей в моих закладках, который указывает на работу вокруг для большинства других браузеров, которые могли бы помочь.
CSS3 будет большим, если это когда-нибудь доберется здесь...
Hope, которая помогает, будет интересно видеть то, что Вы придумываете. Извините я не могу предложить ничего протестированного или более определенного.
Я думаю, это зависит от того, что вы хотите делать. Ajax представляет собой довольно широкий спектр сценариев, от Google Maps до простого автозаполнения, отличается большой сложностью и лучшим подходом.
Однако есть несколько полезных вещей, которые вы можете сделать, чтобы помочь.
1) Уровень шаблона
Убедитесь, что у вас есть «django.core.context_processors.request» в настройке TEMPLATE_CONTEXT_PROCESSORS. Затем вы можете сделать это:
{% if not request.is_ajax %}
<html>
<head>
...
</head>
<body>
...
{% endif %}
actual content
{% if not request.is_ajax %}
</body>
</html>
{% endif %}
В общем, тогда скажите, что эта страница / test /, вы можете сделать запрос браузера и получить полный контент или запрос через JavaScript и просто получить контент. Где-то есть пост в блоге, который объясняет это более подробно, но я не могу его найти в данный момент.
2) В представлении
В шаблоне мы просто обращаемся к объекту запроса в шаблоне. В представлении можно делать очень похожие вещи.
def my_view(request):
if requst.is_ajax():
# handle for Ajax requests
# otherwise handle 'normal' requests
return HttpResponse('Hello world')
Вышеупомянутые методы на самом деле не делают этого иначе, чем вы, но позволяют повторно использовать представления и писать их немного более кратко. Я бы не сказал, что то, что вы делаете, неправильно или взломано, но вы можете написать это, чтобы сделать его более кратким и повторно использовать шаблоны и представления.
скажем, например, у вас может быть только один шаблон, и если это Ajax запросить, чтобы он возвращал только тот раздел, который необходимо обновить. В вашем случае это будут представления таблиц.
скажем, например, что у вас может быть только один шаблон, и если это запрос Ajax, он должен возвращать только тот раздел, который необходимо обновить. В вашем случае это будут представления таблиц.
скажем, например, что у вас может быть только один шаблон, и если это запрос Ajax, он возвращает только тот раздел, который необходимо обновить. В вашем случае это будут представления таблиц.
Неважно, что , вам понадобятся как минимум две вещи:
Ваш код javascript для вызова (он у вас есть)
Код на стороне сервера для обработать запрос (это ваше представление и url-config)
В этом нет абсолютно ничего "взломанного".
Третье, ваш файл шаблона, является необязательным, но обычно является хорошей практикой. Вы хотите отделить разметку от кода по многим причинам.
Так что я думаю, что вы правильно поняли. Продолжайте.
Что именно кажется в этом хакерским? Похоже на вполне допустимый способ что-то сделать.
Думаю, альтернативой была бы сериализация в json и отправка его обратно во фрагмент шаблона javascript.
Я довольно поздно, но хочу задокументировать как комбинировать и адаптировать решения, представленные d0ugal в некотором смысле, что это разрешит гораздо более чистый код шаблона.
У меня есть модель, представляющая контактных лиц.
(общее) представление для получения одного ContactPerson выглядит следующим образом:
def contcactperson_detail_view(request, name):
try:
person = ContactPerson.objects.get(slug=name)
except:
raise Http404
if request.is_ajax():
return contcactperson_detail_view_ajax(request, person)
return list_detail.object_detail(
request,
queryset = ContactPerson.objects.all(),
object_id = person.id,
template_object_name = "contactperson",
)
@render_to('cms/contactperson_detail_ajax.html')
def contcactperson_detail_view_ajax(request, person):
return {'contactperson':person, 'is_ajax':True}
Шаблон для визуализации представления, которое обрабатывает один ContactPerson, называется contcactperson_detail_view.html
:
{% extends "index.html" %}
{% block textpane %}
<h1 id="mainheader">{{ contactperson.first_name }} {{ contactperson.family_name }} </h1>
<div class="indentation"> </div>
{% include 'cms/contactperson_detail_photo.html' %}
<div id="text_pane">
{% include 'cms/contactperson_detail_textpane.html' %}
</div>
{% endblock %}
Он включает два подшаблона
contactperson_detail_textpane.html
<p>{{ contactperson.description }}</p>
<ul>
<li>
<dl>
<dt>Email</dt>
<dd>
{{ contactperson.mail }}
</dd>
</dl>
</li>
<li>
<dl>
<dt>Contact Person for</dt>
<dd>
<ul>
{% for c in contactperson.categories.all %}
<li><a href="{% url category-view c.slug %}">{{ c }}</a></li>
{% endfor %}
</ul>
</dd>
</dl>
</li>
</ul>
и contactperson_detail_photo.html
{% with contactperson.photo.detailphoto as pic %}
{% with pic.url as pic_url %}
<div {% if not is_ajax %}id='imageContainer'{% endif %} style="float: right;padding-right:0.5em;
padding-bottom: 1em; padding-left:0.5em;clear:both;
width:{{ pic.width }}px">
<div style="width:{{ pic.width}}px">
<img style="clear:both" src="{{ pic_url }}" alt="{{ i.name }}"/>
</div>
</div>
{% endwith %}
{% endwith %}
эти 3 шаблона будут использоваться, если запрос не является ajax.
Но если запрос является ajax, contcactperson_detail_view
вернет представление contcactperson_detail_view_ajax
, который использует шаблон contactperson_detail_ajax.html
для рендеринга. И этот шаблон выглядит так:
<h1>{{ contactperson.first_name }} {{ contactperson.family_name }}</h1>
{% include 'cms/contactperson_detail_photo.html' %}
{% include 'cms/contactperson_detail_textpane.html' %}
Таким образом, он использует те же подшаблоны, но ничего не расширяет, поэтому доставляется только необходимая разметка. Поскольку представление ajax передает шаблону is_ajax = True
, его можно использовать для корректировки незначительных вещей, таких как установка правильных атрибутов идентификатора.
Не требуется контекстный процессор или дополнительная конфигурация URL.
] Наконец, код Javascript:
$("#contact_person_portlet a").click(function(event){
event.preventDefault();
$.ajax({
type: "GET",
url: event.target.getAttribute('href'),
success: function(msg){
overlay(msg);
}
});
});
Надеюсь, что это будет полезно для некоторых людей. Если да, оставьте, пожалуйста, комментарий!