Как я могу установить <td> ширину для визуального усечения ее отображенного содержания?

Вы получаете NameError, то есть питон не знает что-то. Это часто проблема с областью видимости или иногда вы забыли создать переменную (или опечатка в вашем имени переменной).

Для отладки вы можете закомментировать строку с ошибками и вместо print() ... чтобы увидеть, что может быть не так - вы можете прочитать еще несколько советов по отладке: Можете ли вы пройти по коду Python чтобы помочь отладить проблемы?


Ошибка:

Ваш код имеет termine - не events и использует дикую смесь немецкого языка, английский и испанский (?).

Исправлено:

calendar = ['01.02.2019', '02.02.2019']
termine = ['15:20 playing football', '17:30 playing basketball']


date = str(input('Date: '))
if (date in calendar):           
    print ('found')                                         
    esindices = [i for i, x in enumerate(calendar) if x == date] 
    print (esindices)
    for index in esindices:  # this is a list, not a single index - you need to iterate over
        print(termine[index]) # fix naming

Было бы лучше использовать словарь - вы можете использовать реальные даты в качестве ключа и список вещей, которые нужно сделать как значение:

import datetime

# your calender dictionary
cal = {}

# today
dt = datetime.date.today()

# put in some values
for i in range(5):
    cal[dt-datetime.timedelta(days=i)] = [f"look {i} vids"]    

# print default values
print(cal)

Вывод:

# defaults 
{datetime.date(2019, 1, 19): ['look 0 vids'], 
 datetime.date(2019, 1, 18): ['look 1 vids'], 
 datetime.date(2019, 1, 17): ['look 2 vids'], 
 datetime.date(2019, 1, 16): ['look 3 vids'], 
 datetime.date(2019, 1, 15): ['look 4 vids']}

Ввод дополнительных данных:

# get input, split input
datestr,action = input("Date:action").split(":")  # 2018-01-25:Read a book

# make datestr into a real date
date = datetime.datetime.strptime(datestr.strip(),"%Y-%m-%d").date()

# create key if needed, append action to list (use a defaultdict - it is faster then this)
# if you feel you hit a speed-problem and want it to be more "optiomal"
cal.setdefault(date,[]).append(action)


# input another date:action
datestr,action = input("Date:action").split(":")  # 2018-01-25:Go out and party

# parse the date again
date = datetime.datetime.strptime(datestr.strip(),"%Y-%m-%d").date()

# this time the key exists and we add to that one
cal.setdefault(date,[]).append(action)

# print all
print(cal)

Вывод:

# after inputs:
{datetime.date(2019, 1, 19): ['look 0 vids'], 
 datetime.date(2019, 1, 18): ['look 1 vids'], 
 datetime.date(2019, 1, 17): ['look 2 vids'], 
 datetime.date(2019, 1, 16): ['look 3 vids'], 
 datetime.date(2019, 1, 15): ['look 4 vids'], 
 datetime.date(2018, 1, 25): ['Read a book', 'Go out and party']}

Доку: dict.setdefault

20
задан Brian Tompsett - 汤莱恩 16 September 2016 в 15:09
поделиться

5 ответов

Я просто попытался добавить table-layout: fixed; к <table>, и это работало на меня на IE7.

В фиксированной сервировке, горизонтальный макет только зависит от таблицы width, ширина столбцов а не содержание ячеек

Выезд документация .

31
ответ дан 30 November 2019 в 00:01
поделиться

"Усеченным" Решением

CSS не может быть слово, которое Вы ищете. Можно просто хотеть скрыть переполняющиеся символы. Если это так, изучите свойство CSS "переполнение", которое скроет любое расширение содержания мимо заявленных пределов его контейнера.

td div.masker {
  height:25px;
  width:100px;
  overflow:hidden;
}

<td>
  <div class="masker">
    This is a string of sample text that
    should be hidden when it reaches out of the bounds of the parent controller.
  </div>
</td>

Решение

JavaScript, Если Вы действительно желаете усечь текст в контейнере, необходимо будет удалить один символ справа, протестировать ширину родителя и продолжить удалять символы и тестирование родительской ширины, пока родительская ширина не соответствует заявленной ширине.

while (parent.width > desiredWidth) {
  remove one char from right-side of child-text
}
4
ответ дан 30 November 2019 в 00:01
поделиться
<td id="td1" style="overflow-x:hidden;">

Должен быть

<td id="td1" style="overflow:hidden;">

, переполнение-x является атрибутом Microsoft CSS, который является теперь частью CSS3. Я придерживался бы более старого водосливного атрибута.

РЕДАКТИРОВАНИЕ:

, Поскольку Паоло упоминает, что также необходимо добавить таблицу-layout:fixed; и укажите ширину таблицы. Полный пример следует.

<html>
<head>
<style>
    table
    {

        table-layout:fixed;
        width:100px;
        }
td
{
    overflow:hidden;
    width:50px;
    border-bottom: solid thin;
    border-top:solid thin;
    border-right:solid thin;
    border-left:solid thin;

}
</style>
</head>
<body>
<table>
<tr><td>Some_long_content</td><td>Short</td></tr>
</table>
</body>
</html>
2
ответ дан 30 November 2019 в 00:01
поделиться

Насколько я знаю, ячейка таблицы будет всегда простираться для размещения ее содержания.

Вы думали об использовании JavaScript динамично усекать данные в ячейках таблицы, которые имеют больше, чем определенное количество содержания? С другой стороны, Вы могли сделать эту более легко сторону сервера.

1
ответ дан 30 November 2019 в 00:01
поделиться

Вы могли использовать jQuery или плоскость JavaScript, чтобы окружить содержание Вашей ячейки (ячеек) с тегами Div и установить закрепленную ширину и overflow:hidden на тех вместо этого. Не красивый, но это работало бы.

ETA:

<td><div style="width:30px;overflow:hidden">Text goes here</div></td>

, Так как DIV является элементом ограничения, это - то, где ширина должна быть установлена.

0
ответ дан 30 November 2019 в 00:01
поделиться